2012-08-09 30 views
1

我注意到,当android操作系统关闭不在活动堆栈顶部的活动时,我的一些静态变量变为null。我绝对相信,变量指向之前的对象,并且我没有自己改变它们的价值。Android应用程序中的系统可以禁用静态变量值吗?

活动重新创建后,我得到nullPointerException会导致我的一个静态变量(在Application的子类onCreate中初始化,并且应该在流程生命周期的任何时间不为null)为null。

因为它不是我谁没有变量,我想它是android操作系统,由于缺乏内存关闭后台活动和空值静态变量。 这可能吗?

回答

2

Android不会关闭不在活动堆栈顶部的活动。如果您的应用程序进入后台并且Android决定要回收内存,则只需杀死承载您的活动的进程。当用户返回到应用程序时,Android会创建一个新进程并重新创建位于活动堆栈顶部的活动

大多数情况下,这就是你所看到的。显然,如果你的进程被杀死并重新创建,你的静态变量将为空。

+0

我应该在哪里保存这个静态变量..共享首选项? – 2013-06-11 14:36:05

+0

这取决于。如果这些是简单变量,那么您可以将它们保存在共享首选项中。如果它们更复杂,可以将它们序列化为一个文件或将它们存储在SQLite数据库中。另一种选择是将它们保存到'onSavedInstanceState()'中的Bundle中,当你的活动被重新创建时,你可以检查静态变量是否为空,如果是,你可以从保存的实例状态中恢复它们。 – 2013-06-11 15:18:26

+0

其他选项。懒加载他们。注意线程(即将方法同步到“getInstance”),或将它们放入自定义应用程序对象(或将它们加载到那里)。你不知道什么Activity会开始,但是应用程序中的Create会被调用。 http://developer.android.com/reference/android/app/Application.html#onCreate()这里不要做I/O,顺便说一句。 – 2013-07-04 05:41:24

1

如果活动正在运行的底层虚拟机/线程被终止,它们只会被清空。那么它就像你完全重新启动应用程序。不要依赖静态变量,如果你需要保持一些东西,将它存储在数据库或首选项中。

相关问题