Android:finishAffinity()vs finishAndRemoveTask()

时间:2017-08-16 02:17:18

标签: android android-fragments android-lifecycle

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

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

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

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

1 个答案:

答案 0 :(得分:12)

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

enter image description here

<强> finishAffinity()

完成此活动以及当前任务中具有相同亲和力的紧随其下的所有活动。

<强> finishAndRemoveTask()

在您的活动完成后调用此应该关闭,并且应该在完成任务的根活动时完全删除任务。

Activity的launchMode的良好演示:standard,singleTop,singleTask和singleInstance是available here