0

下面的代码是错误的来源。我想要的是提出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();
4

1 回答 1

0

我做错什么了吗?

是的,您正在创建Handler新线程的内部。这导致它的发布Runnables在那里执行,这导致loginDialog1.show();在新线程内部执行,但我猜它必须在 UI 线程中执行。

我该如何解决?

在您的 UI-Thread 中创建您的处理程序(例如,作为包含 的对象的实例变量myThrad.start())和post()您的可运行到该处理程序而不是新创建的处理程序。

编辑:

我认为在您的情况下,最终的局部变量会很好:

final Handler myHandler = new Handler();

Runnable myRunnable = new Runnable() {
 [...]
                loginCheck = false;
                myHandler.post(new Runnable() {
                    @Override
 [...]
于 2013-01-09T18:09:21.543 回答