是什么杀死了Android AsyncTask?

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.

问候 !