调用活动中的finish()包含两个执行异步任务的片段,无法销毁和停止异步任务

时间:2015-10-29 20:00:32

标签: android android-fragments asynchronous

我的活动包含两个执行异步任务的片段,当按下Back按钮时,我调用finish()以便它可以结束活动及其片段。但这不起作用并使应用程序崩溃,因为异步任务仍在运行。

 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {


            finish();

        }
        return super.onKeyDown(keyCode, event);
    }

使用上面的代码完成所有其他不包含片段的活动,并且工作正常

2 个答案:

答案 0 :(得分:2)

当您致电finish()时,将调用方法onDestroy(),然后您应检查这些异步任务是否仍在运行,如果是,请取消它们

@Override
public void onDestroy() {
    super.onDestroy();
    if (getAsyncTaskObject() != null
            && getAsyncTaskObject().getStatus() != Status.FINISHED)
        getAsyncTaskObject().cancel(true);


}

答案 1 :(得分:0)

您可以尝试AsynTask的取消功能(true)。当你调用这个函数时,在AsyncTask完成doneInBackground(...)后,它将输入onCancelled()而不是onPostExecute(...)。为了使AsyncTask尽快停止,你应该通过函数isCancelled()来定期检查是否通过doneInBackground(...)取消了任务。