进度对话框在进程中间冻结

use*_*134 2 android progressdialog

我正在尝试在进程运行时显示进度对话框,然后在进程完成后关闭.但是在完成该过程之前,该对话框会冻结.我需要在代码中添加什么?

这是我的代码:

final ProgressDialog dialog = ProgressDialog.show(this, "","Loading..Wait.." , true);
        switch (th.getCurrentTab()) {
        case 0:
            dialog.show();
            Handler menHanlder = new Handler();
            menHanlder.postDelayed(new Runnable() {
                public void run() {
                    for(int i = 0; i < menLV.getCount(); i++)
                    {
                        if(menBooleanArray.get(i) == true) 
                        {
                            selectedFromMenList.add(menLV.getItemAtPosition(i).toString());
                        }
                    }
                    handler.setItemListData(WardrobeActivity.this, "Wardrobe", selectedFromMenList, "Name" , "Men" , "Type");
                    displayView();
                    drawer.closeMenu();
                    refreshTabWidget();
                    selectedFromMenList.clear();
                    dialog.dismiss();
                }   
            }, 3000);
            break;
Run Code Online (Sandbox Code Playgroud)

我使用对话框的方法是不是很糟糕?

任何评论将不胜感激.

Kar*_*ana 10

你的进度Bar介于两者之间,因为你在UI线程上处理繁重的任务,而在Android中,你不应该在UI线程上处理繁重的任务,而是可以使用AsyncTask如下目的:

public class MyTask extends AsyncTask<Void, Integer, Void>{


 @Override
      protected void onPreExecute() {
//Show progress Dialog here

      }


@Override
      protected void onPostExecute(Voidresult) {
           //Update UI here if needed
//Dismiss Progress Dialog here
      }

 @Override
      protected String doInBackground(Void... params) {
            //Do you heavy task here

      }      

}
Run Code Online (Sandbox Code Playgroud)

AsyncTask经历了4个步骤

onPreExecute() 在执行任务后立即在UI线程上调用.

doInBackground(Param ...)onPreExecute()完成执行后立即在后台线程上调用.

onProgressUpdate(Progress...)调用后在UI线程上调用publishProgress(Progress...).

onPostExecute(Result) 在后台计算完成后在UI线程上调用.

并从AsyncTask如下开始:

 new MyTask().execute();
Run Code Online (Sandbox Code Playgroud)