如何真正取消异步任务?
How to really cancel Async task?
我在下载文件时有用于我的 AsyncTask 的 progressDialog。在 AsyncTask 中,我实现了这些方法:
@Override
protected void onCancelled() {
handleOnCancelled(this.result);
super.onCancelled();
}
@Override
protected void onCancelled(String result) {
super.onCancelled(result);
}
在我的活动中,我正在声明 mProgressDialog 并给它 onCancelListener:
mProgressDialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
xml.cancel(true);
}
});
当我按下返回键时,mProgressDialog 关闭,onCancel(上面的方法)被调用,但Async Task 仍然在后台运行。如何解决?
谢谢
您需要在 doInBackground()
方法中反复检查布尔值 isCanceled()
。如果此方法 returns 为真,您应该立即退出任务正在完成的任何循环或后台工作。
参考docs.
试试这个
if(myAsyncTask.getStatus().equals(AsyncTask.Status.RUNNING))
{
myAsyncTask.cancel(true);
}
下载时在异步任务中检查 isCanceled()
。
我在下载文件时有用于我的 AsyncTask 的 progressDialog。在 AsyncTask 中,我实现了这些方法:
@Override
protected void onCancelled() {
handleOnCancelled(this.result);
super.onCancelled();
}
@Override
protected void onCancelled(String result) {
super.onCancelled(result);
}
在我的活动中,我正在声明 mProgressDialog 并给它 onCancelListener:
mProgressDialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
xml.cancel(true);
}
});
当我按下返回键时,mProgressDialog 关闭,onCancel(上面的方法)被调用,但Async Task 仍然在后台运行。如何解决?
谢谢
您需要在 doInBackground()
方法中反复检查布尔值 isCanceled()
。如果此方法 returns 为真,您应该立即退出任务正在完成的任何循环或后台工作。
参考docs.
试试这个
if(myAsyncTask.getStatus().equals(AsyncTask.Status.RUNNING))
{
myAsyncTask.cancel(true);
}
下载时在异步任务中检查 isCanceled()
。