jac*_*nad 1 android android-asynctask
PrintStatusTask解析gmail收件箱中的内容,查找要报告的各种感兴趣的项目.但是根据调试器为每个PrintStatusTask().execute()创建一个新的AsyncTask.这些任务不应该在退出时死亡吗?他们必须手动杀死吗?
public class Controller extends Activity {
...
private boolean applyMenuChoice(MenuItem item) {
switch (item.getItemId()) {
case R.id.menuStatus:
new PrintStatusTask().execute();
...
class PrintStatusTask extends AsyncTask<Void, String, Void> {
@Override
protected Void doInBackground(Void... unused) {
...
return null;
}
@Override
protected void onPostExecute(Void unused) {
this.cancel(true);
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
好的我很抱歉,但我必须告诉你,你错了.AsyncTask(几乎)永远不会被杀死.调用AsyncTask.cancel不会终止任务.
引自AsyncTask的文档
可以通过调用cancel(boolean)随时取消任务.调用此方法将导致后续调用isCancelled()返回true.调用此方法后,将在doInBackground(Object [])返回后调用onCancelled(Object)而不是onPostExecute(Object).为确保尽快取消任务,应始终定期从doInBackground(Object [])检查isCancelled()的返回值,如果可能的话(例如在循环内).
阅读文档可能很有用......所以我会为你总结一下,但是由于我已经在另一篇文章中回答过,我发送给你:如何在Android上建立异步URL连接?
我给你的问题一个解决方法,是的,有一段时间,一些AsyncTask被杀了.但我不建议使用它们,它们没用.但是,因为运行的AsyncTasks如果完成任务就应该显示"等待"状态.否则你的任务没有完成,我从来没有听说过一些adb线程监视bug.
问候 !