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

an0*_*00b 4 android dialog thread-safety ui-thread runnable

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

runOnUiThread(
    new Thread(new Runnable() {
      public void run() { MyDialog.Prompt(this); }
    }).start());
Run Code Online (Sandbox Code Playgroud)

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

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

问题是,我正在尝试做两件错误:

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

通过将对话框创建推迟到UI线程,我想要的只是"做对了",但似乎我遗漏了一些基本的东西.

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

Cri*_*ian 11

肯定是:

runOnUiThread(new Runnable() {
      public void run() { MyDialog.Prompt(NameOfYourActivity.this); }
    });
Run Code Online (Sandbox Code Playgroud)

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

关于第二个错误,它发生是因为该范围this指的Runnable是您正在初始化的对象,而不是对活动的引用.所以,你必须明确告诉this你所指的是什么(在这种情况下YourActivityName.this).