谁能简要概述案件,何时以及如何被运行时杀死活动?我想知道暂停和停止状态之间的区别。是什么迫使系统破坏暂停的活动,就像停止的那样,完全相同的(低记忆)原因?

我认为,如果由于传入的电话而暂停了一项活动(这突然导致记忆力较低),系统只是喜欢释放停止活动的收益。但是如何完成?系统什么时候通过调用饰面()和不何时“友善地问”活动?

有帮助吗?

解决方案

您所问的大部分内容都很好地描述了文档,但我认为我可以澄清一些事情。

我想知道暂停和停止状态之间的区别。

能见度。这两个州之所以与众 Dialog 主题应用。这需要保留所需的任何资源来维持视觉状态。停止的活动可能会抛弃那些可能会使活动销毁或保留的活动之间有所不同的资源。

我认为...该系统只是喜欢发布停止活动的烦恼。但是如何完成?

它必须。停止的活动是完全看不见的,这使他们比仍然对用户看到的东西贡献一些东西的候选者更好。我从未见过Android从一个恢复的活动中撤出了一项暂停但可见的活动,但我想这可能在适当的情况下发生。系统知道每个活动的状态,因为这是指导他们在那里的原因。

系统什么时候通过调用饰面()和不何时“友善地问”活动?

该系统会在可能的情况下进行有序的破坏,但是API仅保证 onPause()onSaveInstanceState().

ETA:从堆栈中删除活动的确切原因是来源。您不应该依靠这些原因是普遍的真理,因为可能有一个未来版本的Android可以以不同的方式做出决定。

其他提示

我明白了课程!我看到了一些有价值的信息,以及昂贵的错误信息。不,在线文档并非在该过程被杀死的情况下确切指定。这是故意的,因为它可能会发生变化而无需通知。当然,称为ondestroy()的最常见原因是,该系统已经用完了内存,这在较新的手机上不太常见(因为它们具有太多的内存)。但是不能保证这是被称为的唯一原因。

但是,是的,Android和开发人员之间的“合同”是,如果您遵守规则,在需要时实施所需的生命周期回调,那么它将起作用,并且您无需在onStop()的情况下确切地知道onsaveinstancestate()和ondestroy()被调用。

现在,与Google不同,我承认合同的措辞在某种程度上有些模糊。这是因为,除其他较小的原因外,他们使用具有标准行业含义的术语,例如“前景”,但他们使用它们的感觉略有改变。而且,这种变化是从未在晦涩的地方解释或解释。该图声称显示“活动可能会在状态之间采取的路径”,但也没有表明可以在多次调用ondestroy(),即使绕过从恢复到停止的过渡,也没有帮助。然而,文本清楚地描述了这种可能性。

不幸的是,这就是为什么阅读“应用程序基础”的应用程序生命周期部分根本不够的原因。取而代之的是,还必须为活动中的每个回调读取Javadoc,以及“应用程序基本原理”的部分。

之后,将log.d语句放在每个回调中非常有帮助,并在您通过生命周期循环应用程序时观看LogCat输出。但是,即使那样,除非您能在上面提到的其中一个在线文档中找到理由,否则不要依靠在LogCat中看到的生命周期事件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top