0

在回答关于何时调用 onDestroy的问题时,Android 文档中出现了似乎不一致的情况。

根据关于任务和后台堆栈的 android 文档

“当用户按下后退按钮时,当前活动从栈顶弹出(活动被销毁)并恢复前一个活动(恢复其UI的先前状态)。”

但与此同时,android 生命周期表明,Activity 不会自动销毁,而是在 UI 部分隐藏时暂停,如果 UI 完全隐藏则停止,并且仅在系统资源不足时才销毁。

这是两个相反的立场。所以我的问题是 - 它是什么?

向@Raghunandan 大喊大叫,让我在评论中与我来回交流了一段时间。希望我们能得到答案。

4

2 回答 2

1

他们在他们的上下文中都是正确的。也许生命周期应该说“仅当系统资源不足从堆栈中弹出时才被销毁”。

考虑一下这个例子。您从活动 A 开始,然后从 A 开始活动 B,然后从 B 开始活动 C。

  • 现在 A 和 B 都被暂停和停止,但没有被破坏
  • 如果 C 占用大量资源,则 A 或 B 可能会被破坏。

现在按下活动 C 中的返回按钮,您将返回活动 B

  • 活动 C 被暂停、停止和销毁

现在再次按返回按钮,您将返回活动 A

  • Activity B 被暂停、停止和销毁

系统尝试保留所有活动实例,以便它们可以快速重新打开。但是当一个活动从堆栈中弹出时,用户将来无法重新打开它们,至少不是同一个实例。

于 2013-06-20T22:04:18.987 回答
0

这两种说法没有矛盾。

onDestroy当你按下 BACK 时被调用,除非你覆盖onBackPressed不调用finish()或做一个奇怪的覆盖finish和不调用的事情super.finish()

如果您不停止对 的调用Activity.finishonDestroy始终调用。

另一个声明没有提到按 BACK,我在您在此处提供的链接下找不到任何地方

并且仅在系统资源不足时才被销毁。

除了onDestroy在应用程序资源不足时被调用(奇怪的是,这在我的手机上不会发生;我得到 OOM),当全球 20 个其他活动(来自所有应用程序)在此之后启动时,它会被调用。

我还鼓励您查看关于何时再次调用 onDestroy 的另一个答案,因为真正的原因是onDestroy没有被调用。

于 2013-06-20T22:18:27.143 回答