当我开发Android应用程序时,我使用AsyncTask
下载了一些内容,我使用progressDialog
来显示此AsyncTask的进度,现在当我按下后退按钮时,我想要取消这个AsycTask ,我调用了AsycTask.cancel()
,但它不起作用。如何取消正在运行的AsyncTask?
答案 0 :(得分:1)
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);
}
};
答案 1 :(得分:0)
最正确的方法是在doInBackground
内定期检查任务是否被取消(即通过调用isCancelled
)。来自http://developer.android.com/reference/android/os/AsyncTask.html:
取消任务:
可以随时通过调用取消任务
cancel(boolean)
。调用此方法将导致后续调用
isCancelled()
返回true
。调用此方法后,
将调用onCancelled(Object)
,而不是onPostExecute(Object)
在doInBackground(Object[])
返回后。确保完成任务
尽快取消,你应该经常检查退货
ifCancelled()的值定期来自doInBackground(Object[])
,如果
可能的(例如在循环内)。
如果您需要更多信息,请查看此博客文章:http://vikaskanani.wordpress.com/2011/08/03/android-proper-way-to-cancel-asynctask/
答案 2 :(得分:0)
点击后退按钮执行以下操作:
将Asynctask声明为全局变量,如下所示:
//AysncTask class
private contactListAsync async;
if(async != null){
async.cancel(true);
async= null;
}