最近做公司项目,由于对AsyncTask了解并不充分,被小小坑了一下,这里Mark一下。
大致是要在AsyncTask执行一个while(true)循环,本以为在Activity的onPause()方法中调用task.cancel(true)就可以强制结束AsyncTask,但是实际上是不可行的,因为task.cancel(true)方法仅仅是将AsyncTask的cancel标识符设置为true,仍然需要去手动停止循环。具体方法见下:
class MyTask extends AsyncTask<Void, Void, Void> {
// variables...
@Override
protected Void doInBackground(Void ...voids) {
// initialization ...
while(true) {
if(isCancelled())
break;
// do my thing ...
}
// ending ...
}
// other methods ...
}
然后在Activity中可以这样去结束一个AsyncTask
class MyActivity extends Activity {
MyTask task = new MyTask();
// other methods ...
@Override
protected void onPause() {
super.onPause();
if(task != null)
task.cancel(true);
task = null;
// do other things ...
}
}
最后,当然也可以自己声明boolean变量去控制循环。
看来官方文档还是要多看看!