为什么这不会导致崩溃?我正在从其他线程更新UI

时间:2012-05-21 08:10:45

标签: android dialog thread-safety android-ui

此示例是从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(解除对话)?为什么此应用会导致细分错误?

感谢。

1 个答案:

答案 0 :(得分:7)

dismiss()方法可以在任何线程上安全地运行,如Android文档中所述。

  

public void dismiss()

     

自:API级别1关闭此对话框,将其从屏幕上删除。   可以从任何线程安全地调用此方法。请注意你   当对话框出现时,不应该覆盖此方法来进行清理   被解雇,而是在onStop()中实现。