在AsyncTask中,我们没有办法直接停止掉异步任务,只能通过cancel方法来将AsyncTask标记为cancel状态,即cancel方法只是传递了一个信号量,而不是真的cancel了异步任务。
所以如果希望cancel方法能直接取消掉异步任务,就需要在doInBackground中检测当前状态:当状态是cancel状态,则立刻跳出循环。
使用cancel:
//将task的状态标记为cancel
if(task!=null&&
task.getStatus() == AsyncTask.Status.RUNNING){
task.cancel(true);
}
在异步任务循环中检测是否当前状态为cancel,若是cancel,则直接结束任务:
class TestTask extends AsyncTask<Void,Integer,Void>{
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
for(int i=0;i<1000;i++){
//如果当前标记为cancel,则跳出循环,直接return
if(this.isCancelled()){
return null;
}
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
【Android基础】AsyncTask学习——如何取消掉AsyncTask
原文地址:http://blog.csdn.net/zgljl2012/article/details/47258301