取消Android asyncTask进度对话框

时间:2013-07-15 18:28:43

标签: android android-asynctask

我有一个Android应用程序,它使用带有进度对话框的AsyncTasks 我的问题是,虽然我设法取消了AsynchTasks我得到了

Activity ... has leaked window 

因为即使我设法取消了asynchTask我还没有取消进度对话框 我怎样才能保证取消asynctasks进度对话框?

@SuppressWarnings("rawtypes")
public OnCancelListener buildOnCancelListener(final AsyncTask asyncTask) {
return new DialogInterface.OnCancelListener() {
@Override
public void onCancel(final DialogInterface dialogInterface) {
    asyncTask.cancel(true);
    }
};
}

2 个答案:

答案 0 :(得分:3)

yourDialog.dismiss();放入onCancelled方法和onPostExecute。如果您使用的是AsyncTask.cancel(...),则在doInBackground()之后将调用onCancelled()而不是onPostExecute()。

记录在案here

答案 1 :(得分:0)

这是因为你试图转移到新的Activity而不首先解除对话。

你可以试试这个:

  • publishProgress()中使用onProgressUpdate()AsyncTask来更新ProgressDialog
  • onProgressUpdate()测试中,在尝试更新对话框之前,对话框是可见/活动的。这不会带来任何同步问题,因为onProgressUpdate在活动的同一UI线程中运行。
  • dialog.dismiss()onCanceled()上致电onPostExecute()
  • 如果对话框已经显示,请务必在dialog.dismiss()中致电Activity.onStop()

dialog.dismiss()中调用onCancel()并不能保证自

以来问题得到解决