我注意到,当 android 操作系统关闭不在活动堆栈顶部的活动时,我的一些静态变量变为空。我绝对确定,变量指向之前的对象,并且我没有自己更改它们的值。
在活动重新创建后,我得到 nullPointerException 导致我的静态变量之一(在应用程序的子类 onCreate 中初始化,并且在流程生命周期的任何时候都应该不为空)为空。
由于不是我使变量为空,因此我认为是 android OS 关闭了后台活动并由于内存不足而使静态变量为空。是否可以?
Android 不会关闭不在活动堆栈顶部的活动。如果您的应用程序进入后台并且 Android 决定它想要回收内存,它只会终止承载您的活动的进程。当用户返回应用程序时,Android 会创建一个新进程并重新创建位于活动堆栈顶部的活动。
很可能,这就是您所看到的。显然,如果您的进程被杀死并重新创建,您的静态变量将为空。
只有在运行活动的底层虚拟机/线程被杀死时,它们才会被清空。那么就像您正在完全重新启动应用程序一样。不要依赖静态变量,如果您需要保留一些东西,请将其存储在数据库或首选项中。