我在onOptionsItemSelected()中执行了一个AsyncTask,我应该在哪里取消这个AsyncTask? 换句话说,在哪个生命周期回调它应该取消吗?
代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
Log.w(TAG, SubTag.msg("onOptionsItemSelected"));
switch (item.getItemId()) {
case R.id.menu_enable_bt:
Log.d(TAG, SubTag.bullet("onOptionsItemSelected", "menu_enable_bt"));
this.mATEnableBT = new ATEnableBT();
this.mATEnableBT.execute();
break;
case R.id.menu_disable_bt:
Log.d(TAG, SubTag.bullet("onOptionsItemSelected", "menu_disable_bt"));
this.mATDisableBT = new ATDisableBT();
this.mATDisableBT.execute();
break;
case R.id.menu_exit:
Log.d(TAG,SubTag.bullet("onOptionsItemSelected", "menu_exit"));
finish();
break;
}
return super.onOptionsItemSelected(item);
}
这取决于这个AsyncTask的目的是做什么。你必须问自己几个问题来决定。
-
当活动部分被另一个活动覆盖时,我的任务是否应该取消?如果是,则在 onPause() 中取消它。通常,最好在此处停止任何连续的 CPU 消耗活动,因为在许多手机上,这将是手机锁定之前的最后一个生命周期回调。
-
当活动进入后台时,例如按下主页按钮或启动下一个活动时,我的任务是否应该取消?如果是,则在 onStop() 中取消它。最好在此处停止中等持续时间的任务和/或对您的活动正常工作不重要的任务。就像可以在这里取消提要更新一样。
-
对于所有其他情况,请在 onDestroy() 中取消它
您的 AsyncTask 似乎运行时间很短,因此在 OnDestroy() 上取消它是有意义的