如何真正取消异步任务?

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()