Android:杀死每个 Activity 是否相当于销毁整个应用程序?

标签 android android-activity static

我的应用包含 2 个 Activity,它们都依赖于一些静态对象。我很好奇如果两个 Activity 都被销毁(例如当设备内存不足时),Android 会终止整个应用并清理我的静态字段吗?

最佳答案

让我们从一些背景知识开始:启动应用程序时会发生什么? 操作系统启动一个进程并为其分配一个唯一的进程ID并分配一个进程表。一个进程启动一个DVM(Dalvik VM)实例;每个应用程序都在 DVM 中运行。 DVM 管理类加载卸载、实例生命周期、GC 等。

静态变量的生命周期:静态变量在类被 JVM 加载时存在,在类被卸载时消亡。

因此,如果您创建一个 android 应用程序并初始化一个静态变量,它将保留在 JVM 中,直到发生以下情况之一:

  1. 类已卸载

  2. JVM 关闭

  3. 进程结束

请注意,当您切换到另一个应用程序的不同 Activity 时,静态变量的值将保持不变,并且上述三种情况都不会发生。如果发生上述三种情况中的任何一种,静态将失去其值(value)。

您可以使用几行代码来测试它:

  • 在您的 Activity 的 onCreate 中打印未初始化的静态 -> 应该打印 null

  • 初始化静态。打印它 -> 值将是非空的

  • 点击后退按钮并返回主屏幕。注意:主屏幕是另一个 Activity 。

  • 再次启动您的 Activity -> 静态变量将为非空

  • 从 DDMS 终止您的应用程序进程(设备窗口中的停止按钮)。

  • 重新启动您的 Activity -> 静态将具有空值。

您问题的答案。 是的,如果您的所有 Activity 都被销毁,您的应用程序进程将被终止。

致谢 Samuh

关于Android:杀死每个 Activity 是否相当于销毁整个应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45773962/

相关文章:

iphone - 使用静态 NSDate 确定通过时间

c++ - 访问类中指针的 vector

c# - 用于延迟加载的静态抽象属性的替代方案

android - 如何验证 robotium 中的 View 或布局

Android上层Copy/Paste工具栏

android - 在 android 上,我将如何创建一个扩展 Location Listener 的类,以便我的主要 Activity 和 Intent Service 可以使用同一个对象?

android - 按HOME后重新启动应用程序时如何返回最新启动的 Activity ?

android - 无法使用 React Native 和 Firebase 进行 Google OAuth 身份验证

android - 在 Android 中将时间戳转换为日期?

java - 我的 Activity 在未输入 OnSaveInstanceState 句柄的情况下关闭