取消异步任务的推荐回调是什么



我在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的目的是做什么。你必须问自己几个问题来决定。

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

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

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

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

最新更新