finishAffinity不会杀死异步任务

时间:2018-10-07 08:21:56

标签: java android

当我呼叫finishAffinity时,我发现它不会杀死从其他活动中打开的异步任务。

致电finishAffinity时如何完成其​​他活动中的所有异步任务?

finishAffinity();

2 个答案:

答案 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

EventBus library

答案 1 :(得分:0)

您需要从partial的{​​{1}}功能中停止AsyncTaskonDestroy完成后,应停止使用其引用先前创建的Activity

让我们假设Activity已开始以下AsyncTask

ActivityA

AsyncTask的{​​{1}}函数中输入以下内容。

// You might have started your AsyncTask like this
private YourAsyncTask mTask;
mTask = new YourAsyncTask().execute();

希望有帮助!