[java] 公共静态变量和Android活动生命周期管理


Answers

从2:50 http://www.infoq.com/presentations/Android-Design可以看到很好的解释

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

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

Question

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

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

怎么了:

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

  2. 变量“foo”不存在?

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






Related