Android 取消任务进度对话框

Android 取消任务进度对话框,android,android-asynctask,Android,Android Asynctask,我有一个android应用程序,它使用带有进度对话框的AsyncTasks。 我的问题是,尽管我已经设法取消了异步任务,但我得到了 Activity ... has leaked window 这是因为即使我已成功取消了asynchTask,我也没有取消进度对话框。 如何保证取消asynctasks进度对话框? @SuppressWarnings("rawtypes") public OnCancelListener buildOnCancelListener(final AsyncTask

我有一个android应用程序,它使用带有进度对话框的
AsyncTasks

我的问题是,尽管我已经设法取消了
异步任务
,但我得到了

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

yourDialog.discouse()放入onCancelled
方法和
onPostExecute
中执行code>。如果您使用的是AsyncTask.cancel(…),则onCancelled()将在doInBackground()而不是onPostExecute()之后调用


这是有文档记录的。

这是因为您试图在不首先关闭对话框的情况下移动到新的
活动

您可以尝试以下方法:

  • 使用
    AsyncTask
    中的
    publishProgress()
    onProgressUpdate()
    更新
    ProgressDialog
  • onProgressUpdate()
    中,在尝试更新对话框之前,测试对话框是否可见/处于活动状态。这不会带来任何同步问题,因为
    onProgressUpdate
    在活动的同一UI线程中运行
  • 调用
    对话框。在
    onCanceled()
    onPostExecute()
  • 如果您的对话框已可见,请确保在
    Activity.onStop()
    中调用
    dialog.disclose()
onCancel()
中调用
dialog.disease()
不能保证问题得到解决,因为我的onPostExecute()已经调用了dialog.disease。但是,使用cancel(true)取消异步任务时,将不会调用onPostExecute()。