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

时间:2011-03-31 02:19:46

标签: android dialog thread-safety runnable ui-thread

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

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中没有 适用于参数(void)
  2. 方法中的提示(Activity) 类型MyDialog不适用 参数(new Runnable(){})
  3. 通过将对话框创建推迟到UI线程,我想要的只是“做对了”,但似乎我遗漏了一些基本的东西。

    我缺少什么,如何完成我想要实现的看似简单的任务?

1 个答案:

答案 0 :(得分:11)

必须是:

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

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

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