我有一个包含两个片段的活动,这两个片段都在执行异步任务,当按下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(..)取消任务。