我正在尝试从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);
}
问题在于,我正在尝试做两件错误:
通过将对话框创建推迟到UI线程,我想要的只是“做对了”,但似乎我遗漏了一些基本的东西。
我缺少什么,如何完成我想要实现的看似简单的任务?
答案 0 :(得分:11)
必须是:
runOnUiThread(new Runnable() {
public void run() { MyDialog.Prompt(NameOfYourActivity.this); }
});
它表示不适用于参数(void),因为您尝试使用start方法(这是一个void方法)运行一个线程。 runOnUiThread
收到一个可运行的对象,你不必担心启动它,这是由操作系统为你完成的。
关于第二个错误,它发生的原因是因为范围this
指的是您正在初始化的Runnable
对象,而不是对活动的引用。因此,您必须明确说明您所指的this
(在本例中为YourActivityName.this
)。