我的活动包含两个执行异步任务的片段,当按下Back按钮时,我调用finish()以便它可以结束活动及其片段。但这不起作用并使应用程序崩溃,因为异步任务仍在运行。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
}
return super.onKeyDown(keyCode, event);
}
使用上面的代码完成所有其他不包含片段的活动,并且工作正常
答案 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(...)取消了任务。