取消AsyncTask

时间:2016-02-11 14:49:11

标签: android android-asynctask android-lifecycle

我在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);
}

1 个答案:

答案 0 :(得分:1)

这取决于AsyncTask的目的。你必须问自己几个问题。

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

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

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

  4. 中取消

    你的AsyncTask似乎是短跑的,所以在OnDestroy()上取消它是有意义的