当应用程序处于后台时,Android是否可以在不杀死整个过程的情况下杀死活动



我想知道安卓系统是否能够在最小化应用程序的同时,在没有整个应用程序过程的情况下杀死活动。从Android文档中我们知道,onDestroy只有在活动即将被销毁时才会被调用,并且系统保证在活动即将终止时调用此方法,只有在整个应用程序进程被终止的情况下才会被调用。

因此,想象一下这样的情况——你将应用程序发送到后台(最小化(,一段时间后,操作系统开始内存不足,并决定终止该活动,但由于应用程序当前处于挂起状态,无法执行代码,因此无法调用其onDestroy方法,尽管可以保证在每次活动销毁之前都会调用它。

因此,这种推理让我想到,当应用程序处于后台时,操作系统只能杀死整个过程,而不能杀死一些特定的活动。我的推理正确吗?还是我遗漏了什么?

这是真的:当应用程序在后台时,操作系统只能杀死整个过程,而不能杀死一些特定的活动。

您的推理是正确的。

如果用户导航离开活动/应用程序(例如,通过按下主页按钮(;已停止";状态(状态为"不存在"、"停止"、"暂停"one_answers"恢复"(。如果android内存不足,需要杀死一些进程,它将针对那些活动在";已停止";状态,它会杀死整个过程(而不是活动(。此外,这样做时不会有礼貌,因此不会调用活动的onDestroy()方法。

编辑以下关于进程死亡时保存状态混乱的评论:

如果活动的进程被终止,系统会在活动外部临时保存一组设置,并使用这些设置在下次启动时重新创建活动。

例如,就在移动到";已停止";状态系统对不是"状态"的活动调用CCD_ 4;成品";并将该CCD_ 5保存在活动的外部。系统还记得它在完成时杀死了活动的进程。使用这两个设置以及其他设置(保存在活动之外(,系统将重新创建活动。

然而,如果活动已完成(例如,用户按下后退按钮,从概览窗口中刷卡,显式调用Activity.finish()等(,则不会调用onSaveInstanceState(),系统也不会保存任何设置以在下次启动活动时重新创建该活动。它只是创造了一个新鲜的。

这是个好消息,为什么?因为如果不是这样的话,开发人员将不得不手动将关键状态属性隐藏在活动之外,并在活动重新启动时恢复它们(这将是一场噩梦(

由于在这个问题上有很多混乱,很大程度上是由于过去官方文档的混乱状态,下面是文档的说法目前:

系统从不直接杀死活动以释放内存。相反,它会扼杀活动运行的过程,破坏不仅是活动,还有流程中运行的所有其他内容好

这与现实世界的观察结果一样,得出的答案是否定的。

https://developer.android.com/guide/components/activities/activity-lifecycle#asem

相关内容

最新更新