我正试图从onAtteranceCompleted()中的非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);
}
问题是,我在尝试做的事情中可能会出现两个错误:
runonuithread方法(runnable)
在类型活动中
适用于参数(无效)
中的方法提示(活动)
MyDialog类型不适用
对于参数(new runnable(){})
我只想通过将对话框创建推迟到一个ui线程来“做正确的事情”,但似乎我缺少了一些基本的东西。
我遗漏了什么,如何完成我试图完成的看似简单的任务?
最佳答案
必须是:
runOnUiThread(new Runnable() {
public void run() { MyDialog.Prompt(NameOfYourActivity.this); }
});
它说这不适用于参数(void),因为您正在尝试使用start方法(这是一个void方法)运行线程。
runOnUiThread
接收一个可运行对象,您不必担心启动它,这是操作系统为您完成的。关于第二个错误,发生这种情况是因为在这个范围内
this
是指您正在初始化的Runnable
对象,而不是指对活动的引用。所以,你必须明确地说出你指的是什么(在本例中是指什么)。