我需要在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线程上完成。那么,我该怎么做才能显示进度对话框?
答案 0 :(得分:0)
如果真的需要a second or so to complete
,那么你可以使用简单的Toast通知和“请稍候”这样的消息
答案 1 :(得分:-1)
当您使用AsyncTask
时,您可以覆盖在onProgressUpdate
内拨打publishProgress()
时调用的doInBackGround
,这样您就可以在工作时顺利发布结果后台因为,onProgressUpdate
适用于UI线程。