为了账号安全,请及时绑定邮箱和手机立即绑定

finishAffinity 不会终止异步任务

finishAffinity 不会终止异步任务

POPMUISE 2021-11-03 14:43:06
当我打电话时finishAffinity,我观察到它不会终止从其他活动打开的异步任务。当我打电话时,如何完成来自其他活动的所有异步任务finishAffinity?finishAffinity();
查看完整描述

2 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

解决方案 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。


查看完整回答
反对 回复 2021-11-03
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

您需要停止AsyncTask从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);

希望有帮助!


查看完整回答
反对 回复 2021-11-03
  • 2 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信