公共静态变量和安卓活动生命周期管理

根据文档,Android操作系统可以杀死后堆栈后部的活动。

因此,假设我有一个应用程序并打开主要活动(我们称之为活动A)。在这个公共活动类中,我声明并初始化一个公共静态变量(我们称之为“foo”)。在活动 A 的 onCreate() 方法中,我更改了 “foo” 的值。从活动 A 中,用户在我的应用中启动另一个名为活动 B 的活动。活动 B 中使用变量“foo”。在用户导航到其他应用中的某些其他活动后,活动 B 将暂停。最终,在内存不足发生后,活动A和活动B可以被杀死。用户导航回我的应用后,它会重新启动(实际上是“重新创建”)活动 B。

会发生什么:

  1. 此时,变量 “foo” 是否具有在活动 A 的 onCreate() 方法运行时设置为它的值?

  2. 变量“foo”不存在?

  3. 变量 “foo” 存在,但现在是初始化的值,而不是在活动 A 的 onCreate() 方法中设置的值?


答案 1

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

因此,您在活动 A 中设置的任何值都不会保留


答案 2

从2:50 http://www.infoq.com/presentations/Android-Design

以下是针对想要手动测试此问题的用户的一些说明:创建android v.4模拟器,然后转到设置 - >开发人员设置 - >禁用后台任务。然后创建包含 2 个活动的示例 android 项目,在活动 A 中声明静态变量,在 onCreate() 方法中初始化它。在启动活动 B 的活动 A 中放置一个按钮。在活动 B 的 onCreate() 方法中,将 A.staticVar 的值打印到 logcat。

启动项目 - 显示作业 A。点击按钮 - 活动B出现,静态变量的值被打印到logcat。按主页按钮并启动任何其他程序 - 您的示例项目进程将被终止(因为您已禁用后台进程)。现在长按主页按钮 - 您将看到最近启动的程序列表。选择示例项目 - 操作系统将尝试恢复项目的活动回堆栈并重新创建上次运行的活动 B。但是在此步骤中,程序将使用 NullPointerException 崩溃,因为 A.staticVar 将为 null,并且我们正在尝试将其打印到 logcat。


推荐