PrintStatusTask解析gmail收件箱的内容,查找各种感兴趣的项目以进行报告。但是根据调试器为每个PrintStatusTask()。execute()创建一个新的AsyncTask。这些任务不应该退出?他们是否必须手动杀死?杀死Android 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);
}
}
}
PrintStatusTask在任务完成后退出。但是,在PrintStatusTask(请参阅更新后的代码片段)中添加 this.cancel(true)到onPostExecute()也不会终止该任务。我猜想任务会在电池耗尽并且设备关闭后消失,但不喜欢该解决方法。任何其他想法? – jacknad 2010-08-17 23:01:53
在'onPostExecute'中调用'cancel'是无用的,因为只有在任务完成或被取消后才会调用cancel。你必须在别处叫它。例如,如果您在创建Activity时将“AsyncTask”字段添加到“Activity”并将任务保存在那里,那么稍后可以在活动的“onDestroy”上执行“mPrintTask.cancel”(如果适用)。当然,您必须先选择任务的生命周期,然后才能找到适当的地方来取消它。 – 2010-08-18 00:55:10
这就是我的想法。除了onPostExecute被调用,但AsyncTask仍然显示为在调试窗口中运行。这可能是Eclipse/Android环境中的一个缺陷,即使任务已经真正退出,它也不能从调试窗口中正确删除AsyncTask指示? – jacknad 2010-08-18 11:18:02