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