根据文档的是Android OS可以杀死在堆栈中后面的活动。
因此,比方说我有一个应用程序,并打开了主要活动(姑且称之为活动A)。 在这种公共活动课我声明并初始化一个公共静态变量(姑且称之为“富”)。 在活动A的onCreate()方法我然后改变的值为“foo”。 从活动A的用户开始然后叫活动B.变“富”在活动B.活动B使用我的应用程序中的另一个活动被暂停的用户导航到其他应用一些其他的活动后。 最终,内存不足发生之后,活动A然后活动B可以被杀死。 用户返回到我的应用程序后,将重新启动(实际上是“再现”)活动B.
怎么了:
将变“富”在这一点上有一个被设置为它当一个活动的onCreate()方法运行的价值?
变“富”不存在?
变量“foo”的存在,但现在是初始化值,而不是在一个活动的onCreate()方法中设置的值?
如果进程被杀死,那么所有静态变量将重新初始化为默认值。
所以,无论价值,你在活动A已经设置不会持续
很好的解释可以在这里从2:50观看http://www.infoq.com/presentations/Android-Design
这里是为那些谁想要手动测试这个问题的一些说明:创建的Android模拟器第4节,然后去设置 - >开发设置 - >禁用后台任务。 然后,创建样品的Android项目2周的活动,在活性的声明静态变量,在初始化的onCreate它()方法。 置于活性的一个按钮,开始活动B.在活动B的onCreate()方法印刷A.staticVar的值logcat的。
启动项目 - 出现活性的。 按下按钮 - 出现活动B,静态变量的值被打印到logcat的。 按下主屏幕按钮并启动其他程序 - 您的样本项目的进程就会被杀死(因为你已经禁用了后台进程)。 现在,在home键长按 - 你会看到最近推出的程序列表。 选择您的样本项目 - 操作系统将尝试恢复项目的活动回堆栈,并重新创建上次运行活动B.但在这一步程序将与NullPointerException异常崩溃,因为A.staticVar将是无效的,我们正在试图打印到logcat的。
答案是(3)。 如果您需要保留的价值观,坚持他们共享偏好时,每个活动暂停,当它恢复恢复。 另外,您还可以保持一个“初始化”静态标志,并从任何活动的重新初始化静态变量onCreate()
方法,如果是假的。