我想在特定条件下取消异步任务。 我正在做以下事情:
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我发现任务进入等待状态。任何解决此问题的建议都将受到高度赞赏。
谢谢, Yuvi
答案 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.
}