以下代码是错误的来源。我想要的是在loginDialog1
成立后调出loginRedirectCheck
。但是,应用程序崩溃,而不是显示progressDialog
。我做错了吗?我该如何解决?谢谢。
Runnable myRunnable = new Runnable() {
@Override
public void run() {
while(loginCheck){
if(loginRedirectCheck){
loginCheck = false;
new Handler().post(new Runnable() {
@Override
public void run() {
loginDialog1.show();
}
});
}
}
}
};
Thread myThread = new Thread(myRunnable);
myThread.start();
答案 0 :(得分:0)
我做错了吗?
是的,您正在新线程中创建Handler
。这会导致在那里执行发布的Runnables
,导致在新线程中执行loginDialog1.show();
,但我想它必须在UI-Thread中执行。
我该如何解决?
在UI-Thread中创建处理程序(例如,作为包含myThrad.start()
的对象的实例变量)和post()
您的runnable到该处理程序而不是新创建的处理程序。
编辑:
我认为在你的情况下,最终的局部变量会很好:
final Handler myHandler = new Handler();
Runnable myRunnable = new Runnable() {
[...]
loginCheck = false;
myHandler.post(new Runnable() {
@Override
[...]