了解简单的进度对话框,另一个线程如何更新UI?

时间:2012-05-19 09:51:48

标签: android dialog progressdialog 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(解除对话)吗?为什么此应用会导致细分错误?

感谢。

2 个答案:

答案 0 :(得分:1)

你在运行方法中不能dismiss()因为它是non UI thread。如果你想解雇那么请使用Handler。最好使用AsyncTask

答案 1 :(得分:0)

代码是正确的man.You正在使用.start函数启动一个线程,然后调用run函数,然后7秒后对话将解散.context.dismiss()用于解除对话。如果您不打电话给dismiss(),进度条永远不会被解雇。您可以通过评论Thread.sleep(7000)行来检查。