【发布时间】:2016-02-11 14:49:10
【问题描述】:
我在 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);
}
【问题讨论】:
-
简单的答案:保证只调用“onPause()”,至少对于大多数 API 级别。更复杂但非常有用的答案:请参阅此链接到another SO question 您的解决方案取决于您的情况:)
-
@0X0nosugar 如果我错了,请纠正我。如果 onStop() 没有被调用,这意味着整个过程都会停止,所以你不需要关心关闭你的任务。换句话说,onStop() 并不能保证仅在进程终止之后的极端情况下。
-
这里人们认为 onStop() 和 onDestroy() 只有在整个过程停止时才被调用:reddit.com/r/androiddev/comments/2s2hqh/…
-
@nickes - 我想我在某处读到了某个 API 级别(但 ??? 在文档中没有找到正确的页面)也总是调用“onStop()”。继续搜索... :)
-
@nickes - 找到了 :) Activity 的文档说 PRE Honeycomb 活动在“onPause()”之后是可终止的,所以我认为 Honeycomb 及以后这意味着只有在“onStop()”之后你的活动才会被杀死(当然是在正常情况下)
标签: android android-asynctask android-lifecycle