ProgressDialog显得太晚,消失得太快

时间:2015-05-19 16:54:43

标签: android multithreading progressdialog slidingmenu

我试图在显示滑动抽屉时显示进度对话框。

这是打开抽屉事件处理程序:

public void onDrawerOpened(View drawerView) { 
    progress = ProgressDialog.show(activity, "dialog title",
            "dialog message", true);

    openDrawer();
} 

openDrawer()内我调用一个函数fillCommunityList(),我需要在执行时显示进度对话框

fillCommunityList()实施如下:

private void fillCommunityList(){
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {

                // Here you should write your time consuming task...
                UIManager manager = new UIManager(activity);
                coms = manager.getCommunities();
                progress.dismiss();
                getOutTread = false;
            } catch (Exception e) {

            }
            getOutTread = false;
        }
    }).start();
    // to stop code till thread be finished
    while(getOutTread){ }

    SlidingMenuExpandableListAdapter adapter = new SlidingMenuExpandableListAdapter(this,
            navDrawerItems, coms, mDrawerList);
    mDrawerList.setAdapter(adapter);
}

注意: 我把一个线程只是为了让进度对话框工作

我的问题有以下两点:

1-进度对话框突然出现太晚,然后消失

2-线程在执行过程中花费了大量时间(没有线程fillCommunityList()大约需要10秒,但是使用线程花费的时间超过一分钟)

注意:manager.getCommunities()在其实现中具有asyncTask

1 个答案:

答案 0 :(得分:1)

问题是以下一行

 while(getOutTread){ }

这是致电busy waiting。 UI线程忙于循环,同时不能绘制/更新ProgressDialog