Android - 在UI线程上工作时显示进度对话框

时间:2012-01-20 10:46:35

标签: android multithreading dialog

我需要在UI线程上做一些工作,特别是设置一些视图等等 - 这不能在后台线程中完成。按钮单击调用该过程,大约需要一秒左右才能完成 - 如果没有进度对话框,它看起来好像应用程序已冻结。我在几个地方使用AsynTask s的进度对话框,它运行正常 - 但是在这里我很挣扎。

我从简单开始:

showDialog(DIALOG_PLEASE_WAIT);
viewInfo.setFromGuide(true);          //this method just sets a variable
viewInfo.setVenue(venue);             //this method does a lot of UI manipulation and takes a second or so
showScreen(VIEW_INFO);                //this method shows the corresponding view in ViewFlipper
dismissDialog(DIALOG_PLEASE_WAIT);

然而,对话框不会显示(有点预期,因为这都是在UI线程上。

然后我将代码更改为:

Handler hnd = new Handler() {
    @Override
    handleMessage(Message m) {
        viewInfo.setFromGuide(true);
        viewInfo.setVenue(venue);
        showScreen(VIEW_INFO);
        dismissDialog(DIALOG_PLEASE_WAIT);
    }
}
showDialog(DIALOG_PLEASE_WAIT);
new Thread() {
    public void run() {
       hnd.sendEmptyMessage(0);
    }
}.start();

这仍然没有显示对话框 - 当然,handleMessage中的UI工作仍在UI线程上完成。那么,我该怎么做才能显示进度对话框?

2 个答案:

答案 0 :(得分:0)

如果真的需要a second or so to complete,那么你可以使用简单的Toast通知和“请稍候”这样的消息

答案 1 :(得分:-1)

当您使用AsyncTask时,您可以覆盖在onProgressUpdate内拨打publishProgress()时调用的doInBackGround,这样您就可以在工作时顺利发布结果后台因为,onProgressUpdate适用于UI线程。