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);
}
}
}
答案 0 :(得分:5)
我找到了一个很好的答案here。
答案 1 :(得分:5)
引自AsyncTask的文档
可以通过调用cancel(boolean)随时取消任务。调用此方法将导致后续调用isCancelled()返回true。调用此方法后,将在doInBackground(Object [])返回后调用onCancelled(Object)而不是onPostExecute(Object)。为确保尽快取消任务,应始终定期从doInBackground(Object [])检查isCancelled()的返回值(如果可能)(例如在循环内)。
阅读文档可能很有用...所以我会为你总结一下,但是因为我已经在另一篇文章中回答了,所以请寄给你:How can I make asynchronous URL connections on Android?
我为你的问题提供了一个解决方法,是的,有一段时间,一些AsyncTask被杀了。但我不建议使用它们,它们没用。但是,因为运行的AsyncTasks如果完成任务就应该显示“等待”状态。否则你的任务没有完成,我从来没有听说过一些adb线程监视错误。
问候!
答案 2 :(得分:1)
如果您保留对任务的引用,可以调用其cancel
方法取消它。否则,只要您的应用进程执行,或者直到他们从doInBackground
和(如果存在)onPostExecute
函数返回,它们就会存在。