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

4

我正在尝试在非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. Activity中的runOnUiThread(Runnable)方法不适用于(void)参数
  2. MyDialog中的Prompt(Activity)方法不适用于(new Runnable(){})参数
我想要的只是通过将对话框创建推迟到UI线程来“正确地”完成它,但似乎我缺少了一些基本的东西。
我缺少什么以及如何完成我正在尝试实现的看似简单的任务?
1个回答

11

必须是这样的:

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

因为您正在尝试使用void方法start运行线程,所以它表明不适用于参数(void)runOnUiThread接收一个可运行对象,您无需担心启动它,这由操作系统为您完成。

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


似乎你只能从Activity中使用runOnUiThread,其他地方不行。 - IgorGanapolsky
是的,没错...那是唯一有意义使用它的地方。 - Cristian
我将“this”保存在一个final上下文变量中:final Context ctx; 然后在调用我的方法时使用它:public void run(){ try { myList =MyStaticClass.getInstance(ctx);}catch{(Exception e){} - JanB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接