如何真正取消异步任务?

时间:2015-03-11 13:47:56

标签: android android-asynctask

我有progressDialog,用于我的AsyncTask,同时下载文件。在AsyncTask中,我实现了theese方法:

@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仍然在后台运行。怎么解决?

由于

3 个答案:

答案 0 :(得分:3)

您需要在isCanceled()方法中重复检查布尔值doInBackground()。如果此方法返回true,则应立即退出该任务正在执行的任何循环或后台工作。

请参阅docs

答案 1 :(得分:0)

试试这个

if(myAsyncTask.getStatus().equals(AsyncTask.Status.RUNNING))
{    
      myAsyncTask.cancel(true);
}

答案 2 :(得分:0)

下载时检查异步任务中的isCanceled()