android - Activity 类型中的方法 runOnUiThread(Runnable) 不适用于参数 (void)

标签 android dialog thread-safety runnable ui-thread

我正在尝试从非 UI 线程在 onUtteranceCompleted() 中创建一个对话框:

runOnUiThread(
    new Thread(new Runnable() {
      public void run() { MyDialog.Prompt(this); }
    }).start());

Prompt() 是 MyDialog 类的一个简单的静态方法:

  static public void Prompt(Activity activity) {
    MyDialog myDialog = new MyDialog();
    myDialog.showAlert("Alert", activity);     
  }

问题是我尝试执行的操作遇到了两个错误:

  1. 方法 runOnUiThread(Runnable) 在 Activity 类型中不是 适用于参数(无效)
  2. Prompt(Activity) 中的方法 类型 MyDialog 不适用 对于参数 (new Runnable(){})

我想要的只是通过将对话框创建推迟到 UI 线程来“做正确的事”,但我似乎遗漏了一些基本的东西。

我缺少什么以及如何完成我想要完成的看似简单的任务?

最佳答案

必须是:

runOnUiThread(new Runnable() {
      public void run() { MyDialog.Prompt(NameOfYourActivity.this); }
    });

它说 不适用于参数 (void) 因为您正在尝试使用 start 方法(这是一个 void 方法)运行线程。 runOnUiThread 收到一个可运行的对象,您不必担心启动它,这是由操作系统为您完成的。

关于第二个错误,它的发生是因为在该范围内 this 指的是您正在初始化的 Runnable 对象,而不是对 Activity 的引用。因此,您必须明确说明您指的是什么 this(在本例中为 YourActivityName.this)。

关于android - Activity 类型中的方法 runOnUiThread(Runnable) 不适用于参数 (void),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5494673/

相关文章:

android - 是否有可能在移动浏览器上获得最大的 GPS 精度?

c++ - 在没有 MFC 的 win32 中保存/打开通用对话框

java - 使用预设选项捕获 JOptionPane 输入对话框的值?

java - 我可以动态修改对话框的布局吗?

c# - 我需要 MemoryBarrier 和 ReaderWriterLockSlim 吗?

android - 如何用 Toothpick 注入(inject) Map<> 或 Set<> (dagger 2 multibindings)

Android - 获取自签名服务器证书并添加到受信任的 keystore

java - 从 Android 颜色转换为 HTML 颜色

java - 在Java中使用同步锁

c++ - 我们需要原子地增加线程局部变量吗?