0

这个例子是从一本关于 Android 的书中复制而来的。正如您从我的问题中看到的那样,我是 Android 新手并试图理解。这个应用程序应该崩溃但它没有(我正在从另一个线程更新 UI。这是不允许的。它应该会导致崩溃。它不会。为什么?)。我的代码是:

final ProgressDialog dialogue = ProgressDialog.show(this, "title", "message");

       new Thread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
                try {
                    Thread.sleep(7000);
                dialogue.dismiss();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }



        }
    }).start();

这是在OnCreate函数中完成的。我对线感到困惑 -dialogue.dismiss();这不是从另一个线程更新 UI(关闭对话)吗?为什么这个应用程序不会导致分段错误?

谢谢。

4

2 回答 2

1

你不能dismiss()在 run 方法中使用它,因为它是non UI thread.and 如果你想关闭然后使用Handler。最好使用AsyncTask

于 2012-05-19T09:56:10.837 回答
0

代码是正确的只有人。你正在使用 .start 函数启动一个线程,然后调用 run 函数,然后在 7 秒后对话将关闭。dialog.dismiss() 用于关闭对话。如果你不会调用dismiss(),进度条永远不会消失。您可以通过评论Thread.sleep(7000)行来检查。

于 2012-05-19T10:52:30.687 回答