gpt4 book ai didi

java - Android任务生命周期和静态数据,任务是否曾经被销毁过?

转载 作者:行者123 更新时间:2023-12-02 06:03:22 25 4
gpt4 key购买 nike

Android Activity 具有明确定义的生命周期,它们将被暂停、停止和销毁。这是有据可查的。我的问题是关于包含我的 Activity as described in the docs 的任务。

在内存不足或其他条件下,任务是否会被操作系统关闭? (我了解用户可以强制停止该应用程序)。

我可以假设我的单例和静态数据始终可用吗?

Activity 中定义的静态成员怎么样?看来 Activity 可能会被销毁,但静态数据只要任务存在就存在。

android.app.Application 有像 onLowMemory() 和 onTrimMemory() 这样的回调,但这些似乎是自愿的,这意味着如果应用程序与操作系统合作是很好的,但它不是必须的。所以,我非常确定我的任务永远不会被正常终止,并且单例和静态是可靠的。这是正确的吗?

This answer 也有一些良好的背景。

最佳答案

我对你的问题非常好奇,所以我很快用一个非常简单的项目做了一个简单的检查,然后我将发布我发现的内容 - 我将根据假设回答其余的问题,因为 Android 的清理过程非常神秘。

  • 已创建 3 个 Activity - A、B、C。A 可以调用 B 或 C。A 是起始 Activity 应用程序的点。 B和C不能调用任何东西。 C 有一个静态整数成员 x。
  • x 是 C 的类成员,最初没有任何值。我设置到5并在C的onCreate()中打印出来。也打印出来在A的onResume()中out。
  • 当我启动应用程序时,A 上显示了一个 toast,其中显示 0 (C.x尚未设定)。然后我导航到 C。我得到一个 toast c=5。
  • 然后我按“返回”并返回到 A。我得到一个 toast c=5。 C 已被毁了。
  • 然后我去B。不 toast 。返回 A。我得到一个 toast c=5。
  • 从A,我按主页。从家里,我再次重新开始 Activity 。我明白了c=5。
  • 我按回车键返回首页(摧毁 A)。然后我重新打开应用程序。我得到 c=5。
  • 然后我返回并从设置中强行停止该应用。然后我重新打开应用程序 - 我得到 c=0。强制停止会完全删除此任务中的所有内容。

由此可见,即使 Activity 被销毁,静态值仍然继续存在。即使应用程序关闭后,Android 仍会保留该值。

Can I assume my Singletons and static data will always be available?

我想说,只要 Android 没有被推到决定需要回收内存的地步,您就可以假设这一点。

从 Commonware 的 Android 教程书中,我了解到任何在后台运行的任务都被视为重要任务,不会被 Android 关闭。但是,如果另一个任务进入前台,则该任务将被赋予更高的优先级,而后台的所有任务将采用较低的优先级。如果 Android 确定前台任务需要更多内存,它将根据优先级顺序开始终止进程​​,优先级顺序取决于多种因素。在内存不足的情况下,任何任务都可能被杀死。在极端情况下,前台任务本身可能会被杀死。

我希望这能回答您的问题。这确实引起了我的兴趣。

关于java - Android任务生命周期和静态数据,任务是否曾经被销毁过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22486453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com