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