public 静态变量在 Android 中的生命周期
Life of public static variable in Android
假设我有一个包含两个活动(Activity1 和 Activity2)的 Android 应用程序。在 Activity1 中,我声明了一个 public static Boolean foo = true
.
当我 finish()
Activity1 并移动到 Activity2 时,我能够看到 "foo" 变量具有值 true
但是当系统内存不足时(例如因为设备上有很多应用程序 运行)然后,当我在 Activity2 上时,我看到 "foo" 变量的值是 null
.
这是怎么解释的?
如果进程被终止,那么所有静态变量将被重新初始化为其默认值。
因此无论您在 Activity1 中设置什么值都不会保留
请务必注意,静态变量的生命周期与 进程 相关,而不是 activity。即使你的 activity 被销毁,静态变量仍然存在(这就是你看到它的值设置为 true 的原因) .只有当进程被销毁时,静态变量才会被正确释放。
这也是您不应使用静态变量来保存对活动、上下文或视图的引用的原因之一。巨大的内存泄漏等待发生。
对于您的特定情况,这意味着:
- Act1 创建并设置变量;您已从 Act1 转到 Act2
- 进程在BG中被杀死
- 当系统试图恢复你时,你最终回到了 Act2
- 但是,由于该变量的初始化发生在 Act1 中,(尚未初始化)变量未设置。
假设我有一个包含两个活动(Activity1 和 Activity2)的 Android 应用程序。在 Activity1 中,我声明了一个 public static Boolean foo = true
.
当我 finish()
Activity1 并移动到 Activity2 时,我能够看到 "foo" 变量具有值 true
但是当系统内存不足时(例如因为设备上有很多应用程序 运行)然后,当我在 Activity2 上时,我看到 "foo" 变量的值是 null
.
这是怎么解释的?
如果进程被终止,那么所有静态变量将被重新初始化为其默认值。
因此无论您在 Activity1 中设置什么值都不会保留
请务必注意,静态变量的生命周期与 进程 相关,而不是 activity。即使你的 activity 被销毁,静态变量仍然存在(这就是你看到它的值设置为 true 的原因) .只有当进程被销毁时,静态变量才会被正确释放。
这也是您不应使用静态变量来保存对活动、上下文或视图的引用的原因之一。巨大的内存泄漏等待发生。
对于您的特定情况,这意味着:
- Act1 创建并设置变量;您已从 Act1 转到 Act2
- 进程在BG中被杀死
- 当系统试图恢复你时,你最终回到了 Act2
- 但是,由于该变量的初始化发生在 Act1 中,(尚未初始化)变量未设置。