Android:finishAffinity()vs finishAndRemoveTask()

Jos*_*ith 8 android android-lifecycle android-fragments

TLDR:finishAffinity()和finishAndRemoveTask()之间有什么区别?

我正在开发一个只有一个活动的Android应用程序,并使用片段切换而不是新活动.

即使在清理后台堆叠时,我也会遇到一个奇怪的问题,即通过背板生活的某个碎片.长话短说,这个片段是活的,因为我从那个片段开始了一个网络浏览器.

使用流行的按回x2在我的主要活动中退出app技术,它将使用finishAndRemove任务"退出".这将返回到某个片段,而不是完全退出.将后面的x2退出流程从finishAndRemoveTask更改为finishAffinity解决了我的问题.为什么这样做?

Pro*_*kar 15

在Android中,所有活动都在任务堆栈中管理.关联性用于对特定任务堆栈下的活动进行分组.通常,亲和关系指示活动喜欢或属于哪个任务.一旦理解了堆栈的工作原理,finishAffinity()finishAndRemoveTask()的含义就非常简单了.

在此输入图像描述

finishAffinity()

完成此活动以及当前任务中具有相同亲缘关系的紧接其下的所有活动.

finishAndRemoveTask()

在您的活动完成后调用此应该关闭,并且应该完成任务作为完成任务的根活动的一部分.

活动的launchMode的一个很好的示范:标准,singleTop,singleTask和singleInstance是可以在这里找到.