我在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);
}
答案 0 :(得分:1)
这取决于AsyncTask的目的。你必须问自己几个问题。
当活动被其他活动部分覆盖时,我的任务是否应被取消?如果是,则在onPause()中取消它。通常最好在这里停止任何持续的CPU消耗活动,因为在许多手机上这将是手机锁定之前的最后一次生命周期回调。
当活动进入后台时,我的任务是否应该取消,例如按下主页按钮,或者下一个活动是否已启动?如果是,则在onStop()中取消它。最好在此处停止中等持续时间的任务和/或对您的活动正常工作不重要的任务。就像可以在这里取消订阅源更新一样。
对于所有其他情况,请在onDestroy()
你的AsyncTask似乎是短跑的,所以在OnDestroy()上取消它是有意义的