我的应用包含 2 个 Activity,它们都依赖于一些静态对象。我很好奇如果两个 Activity 都被销毁(例如当设备内存不足时),Android 会终止整个应用并清理我的静态字段吗?
最佳答案
让我们从一些背景知识开始:启动应用程序时会发生什么? 操作系统启动一个进程并为其分配一个唯一的进程ID并分配一个进程表。一个进程启动一个DVM(Dalvik VM)实例;每个应用程序都在 DVM 中运行。 DVM 管理类加载卸载、实例生命周期、GC 等。
静态变量的生命周期:静态变量在类被 JVM 加载时存在,在类被卸载时消亡。
因此,如果您创建一个 android 应用程序并初始化一个静态变量,它将保留在 JVM 中,直到发生以下情况之一:
类已卸载
JVM 关闭
进程结束
请注意,当您切换到另一个应用程序的不同 Activity 时,静态变量的值将保持不变,并且上述三种情况都不会发生。如果发生上述三种情况中的任何一种,静态将失去其值(value)。
您可以使用几行代码来测试它:
在您的 Activity 的 onCreate 中打印未初始化的静态 -> 应该打印 null
初始化静态。打印它 -> 值将是非空的
点击后退按钮并返回主屏幕。注意:主屏幕是另一个 Activity 。
再次启动您的 Activity -> 静态变量将为非空
从 DDMS 终止您的应用程序进程(设备窗口中的停止按钮)。
重新启动您的 Activity -> 静态将具有空值。
您问题的答案。 是的,如果您的所有 Activity 都被销毁,您的应用程序进程将被终止。
致谢 Samuh
关于Android:杀死每个 Activity 是否相当于销毁整个应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45773962/