当我呼叫finishAffinity
时,我发现它不会杀死从其他活动中打开的异步任务。
致电finishAffinity
时如何完成其他活动中的所有异步任务?
finishAffinity();
答案 0 :(得分:1)
解决方案1
如果您要完成另一个活动,则可以尝试在执行AsyncTask的活动上覆盖onDestroy()方法。
@Override
protected void onDestroy() {
if(asyncTask != null) {
asyncTask.cancel(true);
}
super.onDestroy();
}
解决方案2
或者,您可以从startActivityForResult()
开始下一个活动,并且在致电setResult()
时可以finishAffinity()
。在上一个活动中,您需要通过覆盖onActivityResult()
方法来检查结果。检查finishAffinity()
调用时是否设置了结果,可以像下面这样调用cancel方法:
if(asyncTask != null) {
asyncTask.cancel(true);
}
How to Get Result from an Activity
解决方案3
您还可以使用观察者模式和事件总线触发下一个活动的事件并从上一个活动中捕获事件。事件触发后,您可以检测到它并取消您的 asyncTask 。
答案 1 :(得分:0)
您需要从partial
的{{1}}功能中停止AsyncTask
。 onDestroy
完成后,应停止使用其引用先前创建的Activity
。
让我们假设Activity
已开始以下AsyncTask
。
ActivityA
在AsyncTask
的{{1}}函数中输入以下内容。
// You might have started your AsyncTask like this
private YourAsyncTask mTask;
mTask = new YourAsyncTask().execute();
希望有帮助!