AsyncTask进入等待状态

时间:2013-02-06 07:42:25

标签: android android-asynctask

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

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我发现任务进入等待状态。任何解决此问题的建议都将受到高度赞赏。 Threads

谢谢, Yuvi

2 个答案:

答案 0 :(得分:1)

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

因此,看到AsyncTask线程处于等待状态是正常的。

P.S。最好不要使用AsyncTask进行长时间操作。使用您自己的执行者或线程。

P.P.S。从4.x开始,AsyncTask使用单线程执行程序。小心)

答案 1 :(得分:0)

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

@Override
protected void onCancelled() {
    //what you want to do when the task was cancelled.
}