2

假设我有一个带有两个活动(Activity1 和 Activity2)的 Android 应用程序。在 Activity1 我声明一个public static Boolean foo = true.

当我finish()Activity1 并移动到 Activity2 时,我可以看到“foo”变量具有值true

但是当系统内存不足时(例如,因为设备上运行了许多应用程序),当我在 Activity2 上时,我看到“foo”变量的值是null.

这是如何解释的?

4

2 回答 2

4

需要注意的是,静态变量的生命周期与流程相关,而不是与活动相关。即使您的活动被破坏,静态变量仍然存在(这就是您看到它的值设置为true的原因)。只有当进程被销毁时,静态变量才会被正确释放。

这也是您不应该使用静态变量来保存对活动、上下文或视图的引用的原因之一。巨大的内存泄漏等待发生。

对于您的特定情况,这意味着:

  • Act1 创建并设置变量;您已从 Act1 移动到 Act2
  • 进程在 BG 中被杀死
  • 当系统试图恢复你时,你最终回到 Act2
  • 但是,由于该变量的初始化发生在 Act1 中(尚未初始化),因此该变量没有被设置。
于 2015-09-06T13:44:22.110 回答
0

如果进程被终止,那么所有静态变量都将重新初始化为其默认值。

因此,您在 Activity1 中设置的任何值都不会持续存在

于 2015-09-06T09:32:47.740 回答