Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android应用程序中的系统是否可以将静态变量值设为空?_Android_Variables_Static - Fatal编程技术网

android应用程序中的系统是否可以将静态变量值设为空?

android应用程序中的系统是否可以将静态变量值设为空?,android,variables,static,Android,Variables,Static,我注意到,当android操作系统关闭不在活动堆栈顶部的活动时,我的一些静态变量将变为null。我绝对肯定,变量之前指向对象,我自己没有改变它们的值 在活动重新创建之后,我得到了nullPointerException,因为我的一个静态变量(在应用程序的子类onCreate中初始化,并且在流程生命周期的任何时候都不应该为null)为null 由于不是我为变量设置空值,我想是安卓操作系统关闭后台活动,并由于内存不足而为静态变量设置空值。 是否可能?只有在活动运行所在的底层VM/线程被终止时,才会将

我注意到,当android操作系统关闭不在活动堆栈顶部的活动时,我的一些静态变量将变为null。我绝对肯定,变量之前指向对象,我自己没有改变它们的值

在活动重新创建之后,我得到了nullPointerException,因为我的一个静态变量(在应用程序的子类onCreate中初始化,并且在流程生命周期的任何时候都不应该为null)为null

由于不是我为变量设置空值,我想是安卓操作系统关闭后台活动,并由于内存不足而为静态变量设置空值。
是否可能?

只有在活动运行所在的底层VM/线程被终止时,才会将其置为空。然后就好像您正在完全重新启动应用程序。不要依赖静态变量,如果您需要保留某些内容,请将其存储在DB或首选项中

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


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

我应该将此静态变量保存在何处。。共享偏好?视情况而定。如果这些是简单的变量,那么您可以将它们保存在共享首选项中。如果它们更复杂,您可以将它们序列化为文件或存储在SQLite数据库中。另一个选项是将它们保存到
onSavedInstanceState()
中的捆绑包中,当重新创建活动时,可以检查静态变量是否为null,如果为null,可以从保存的实例状态还原它们。其他选项。懒得加载它们。小心线程(即将方法同步到“getInstance”),或将其放入自定义应用程序对象中(或在其中加载)。您不知道将启动什么活动,但会调用应用程序中的onCreate。顺便说一句,这里不要做I/O。错过了关于应用程序onCreate的部分。读一下。我想看看代码。那确实会被打电话。确保您没有在后台线程中执行操作,也没有在变量准备就绪之前调用它。如果结果显示onCreate没有被调用,它将破坏我的Android worldview,因为它目前的状态。@KevinGalligan当Android创建一个新进程时,它还会实例化
应用程序
对象并调用
onCreate()