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

时间:2013-03-05 03:09:00

标签: 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;

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

任何评论都将不胜感激。

2 个答案:

答案 0 :(得分:10)

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

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

      }      

}

AsyncTask经历了4个步骤

执行任务后立即在UI线程上调用

onPreExecute()

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

onPreExecute()

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

publishProgress(Progress...)

在后台计算完成后,在UI线程上调用

onPostExecute(Result)

并按如下方式启动AsyncTask

 new MyTask().execute();

答案 1 :(得分:0)

这是我的实施

在Asynctask onPreExecute()中,我显示了像这样的进度对话框

@Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog = new ProgressDialog(ContentActivity.this);
        progressDialog.getWindow().clearFlags(
                WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        progressDialog.setMessage("Loading...");
        progressDialog.setCanceledOnTouchOutside(false);
        progressDialog.show();

    }

当你的doInBackground中的任务完成时,调用onPostExecute()。我忽略了像这样的进度对话框

@Override
    protected void onPostExecute(BlognoneContent result) {

        super.onPostExecute(result);
        ..............
            if (progressDialog.isShowing()) {
                progressDialog.dismiss();
            }
            .............

}