0

我想在特定条件下取消异步任务。我正在做以下事情:

MyService.java

....
if(condition){

 asyncTask.cancel(true); // its return the true as well

}
...

MyAsynTask.java

...

protected Object doInBackground(Object... x) {
    while (/* condition */) {
      // work...
      if (isCancelled()){ // Here task goes in to wait state
 break;
  }
      else{
 //continue to download file

   }


    }
    return null;
 }
...

使用 DDMS 我发现该任务进入等待状态。任何解决此问题的建议将不胜感激。 线程

谢谢,尤维

4

2 回答 2

1

AsyncTask 是 PoolExecutor 的一项工作。当您执行第一个任务时,Executor 创建第一个线程并在其上执行您的任务。任务执行完成后,线程不会被删除。它开始等待新任务。

所以看到 AsyncTask 线程处于等待状态是正常的。

PS 长时间操作最好不要使用AsyncTask。使用您自己的执行程序或线程。

PPS AsyncTask 从 4.x 开始使用单线程执行器。当心 )

于 2013-02-06T09:06:45.733 回答
0

显式调用后asyncTask.cancel(true);,将调用该onCancelled()方法。尝试覆盖以下方法:

@Override
protected void onCancelled() {
    //what you want to do when the task was cancelled.
}
于 2013-02-06T10:34:56.123 回答