可能重复:
取消正在执行的 AsyncTask 的理想方法
当我开发一个Android应用程序时,我用anAsyncTask
来下载东西,我用aprogressDialog
来显示这个AsyncTask的进度,现在当我按下后退按钮时,我想取消这个AsycTask,我调用了AsycTask.cancel()
,但是它不起作用. 如何取消正在运行的 AsyncTask ?
可能重复:
取消正在执行的 AsyncTask 的理想方法
当我开发一个Android应用程序时,我用anAsyncTask
来下载东西,我用aprogressDialog
来显示这个AsyncTask的进度,现在当我按下后退按钮时,我想取消这个AsycTask,我调用了AsycTask.cancel()
,但是它不起作用. 如何取消正在运行的 AsyncTask ?
class ImplementAsynctask extends AsyncTask implements OnDismissListener{
ProgressDialog dialog = new ProgressDialog(ActivityName.this);
protected onPreExecute() {
//do something and show progress dialog
}
protected onPostExecute() {
//cancel dialog after completion
}
@Override
public void onDismiss(DialogInterface dialog) {
//cancel AsycTask in between.
this.cancel(true);
}
};
单击后退按钮执行以下操作:
将您的 Aynctask 声明为全局变量,如下所示:
//AysncTask class
private contactListAsync async;
if(async != null){
async.cancel(true);
async= null;
}
最正确的方法是定期检查doInBackground
任务是否被取消(即通过调用isCancelled
)。从http://developer.android.com/reference/android/os/AsyncTask.html:
取消任务:
可以通过调用随时取消任务
cancel(boolean)
。调用此方法将导致后续调用
isCancelled()
返回true
。调用此方法后
,将在返回后调用onCancelled(Object)
, 而不是。为了确保尽快取消任务,如果可能(例如在循环内),您应该始终从 定期检查 isCancelled() 的返回值。onPostExecute(Object)
doInBackground(Object[])
doInBackground(Object[])
如果您需要更多信息,请查看此博客文章:http: //vikaskanani.wordpress.com/2011/08/03/android-proper-way-to-cancel-asynctask/