-1

当我打电话时finishAffinity,我观察到它不会杀死从其他活动中打开的异步任务。

我打电话时如何完成其​​他活动的所有异步任务finishAffinity

finishAffinity();
4

2 回答 2

1

解决方案 1

如果您正在完成另一个活动,您可以尝试在正在执行 AsyncTask 的活动上覆盖 onDestroy() 方法。

@Override
protected void onDestroy() {
    if(asyncTask != null) {
        asyncTask.cancel(true);
    }
    super.onDestroy();
}

解决方案 2

或者,您可以使用 开始您的下一个活动,startActivityForResult()并且可以setResult()在您致电时使用finishAffinity()。在上一个活动中,您需要通过覆盖onActivityResult()方法检查结果。检查是否在finishAffinity()调用时设置了结果,您可以像这样调用取消方法:

if(asyncTask != null) {
    asyncTask.cancel(true);
}

如何从活动中获取结果


解决方案 3

您还可以使用观察者模式和事件总线来触发下一个活动的事件并从上一个活动中捕获它。当事件触发时,您可以检测到它并取消您的asyncTask

事件总线库

于 2018-10-07T08:45:31.483 回答
0

您需要停止AsyncTaskfrom 的onDestroy功能Activity。当Activity完成时,它应该AsyncTask使用他们的参考停止之前创建的。

让我们假设ActivityA已经开始以下AsyncTask

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

在您的onDestroy函数中ActivityA编写以下内容。

if(mTask != null) mTask.cancel(true);

希望有帮助!

于 2018-10-07T08:28:12.983 回答