【问题标题】:what is the recommended callback for canceling AsyncTask取消 AsyncTask 的推荐回调是什么
【发布时间】: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


【解决方案1】:

这取决于这个 AsyncTask 打算做什么。您必须问自己几个问题才能做出决定。

  1. 当活动被另一个活动部分覆盖时,是否应该取消我的任务?如果是,则在 onPause() 中取消它。通常最好在此处停止任何持续的 CPU 消耗活动,因为在许多手机上,这将是手机锁定之前的最后一个生命周期回调。

  2. 是否应该在活动进入后台时取消我的任务,例如按下主页按钮,或者启动下一个活动?如果是,则在 onStop() 中取消它。在这里停止中等持续时间的任务和/或对您的活动正常工作不重要的任务是个好主意。喜欢在这里取消提要更新是可以的。

  3. 对于所有其他情况,在 onDestroy() 中取消它

您的 AsyncTask 似乎运行时间很短,因此在 OnDestroy() 上取消它是有意义的

【讨论】:

猜你喜欢
  • 2010-10-19
  • 1970-01-01
  • 2019-04-06
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 2010-09-11
相关资源
最近更新 更多