【问题标题】:Understanding simple ProgressDialogue , how can another thread update UI?了解简单的 ProgressDialog ,另一个线程如何更新 UI?
【发布时间】:2012-05-19 09:51:48
【问题描述】:

这个例子是从一本关于 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(关闭对话)吗?为什么此应用不会导致分段错误?

谢谢。

【问题讨论】:

    标签: android dialog progressdialog android-ui


    【解决方案1】:

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

    【讨论】:

    • 我认为您误解了我的问题,或者我误解了您的回答。即使我从其他线程更新 UI,此应用也不会崩溃。我想知道它为什么不会崩溃。
    【解决方案2】:

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

    【讨论】:

    • 没错,但我正在从另一个线程更新 UI。这是不允许的。它应该会导致崩溃。它不是。为什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多