简体   繁体   中英

Android - show progress dialog while doing work on UI thread

I need to do some work on the UI thread, specifically setting up some views, etc. - this can't be done in a background thread. The process is invoked on a button click and takes about a second or so to complete - without a progress dialog it looks as if the app is frozen. I use progress dialog with AsynTask s in several places and it works fine - however here I'm struggling.

I started with simple:

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);

However the dialog would not show (sort of expected, as this is all on UI thread.

Then I changed the code to this:

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();

This still doesn't show the dialog - naturally, the UI work in handleMessage is still done on the UI thread. So, what can I do to show the progress dialog?

如果真的需要a second or so to complete ,那么您可以只使用简单的Toast通知,并显示“请稍候”之类的消息

当您使用AsyncTask您可以覆盖onProgressUpdatepublishProgress()doInBackGround内部调用publishProgress()时都会调用publishProgress() ,因此您可以在后台工作时顺利地发布结果,因为onProgressUpdate在UI线程上有效。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM