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



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

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

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

我使用上面的代码来完成所有其他不包含片段的活动,并且它运行良好

当您调用finish()时,方法onDestroy()将被调用,从那里您应该检查这些异步任务是否仍在运行,如果是,则将其取消为

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

}

您可以尝试AsynTask的函数cancel(true)。当您调用此函数时,在AsyncTask完成doingInBackground(…)后,它将进入onCancelled()而不是onPostExecute(…)。要使AsyncTask尽快停止,您应该检查函数isCancelled(…)是否定期从doingInBackground(..)取消任务。

最新更新