当我的应用程序进入后台时,我遇到了静态数据实例丢失的问题,导致空指针异常错误。
静态数据非常具有上下文或“状态”。依赖,并且不能在初始化时生成。
为了确保我保留这些数据,我是否会强制将数据写入存储,或者还有其他方法可以确保我的静态数据在应用程序投放到后台时不会丢失?
答案 0 :(得分:6)
静态字段是类的一部分,而不是对象。当Android回收内存时,静态字段也将被回收,您将丢失其中的所有数据。请记住,操作系统可以在任何时候为应用程序在后台回收内存。
如果您有要保留的状态,则需要将其保留在磁盘上,在Android上,依赖于在后台保留在内存中的任何内容都是一种冒险策略。
我为此使用共享首选项,但如果您愿意,也可以使用序列化文件流。共享偏好更容易且记录良好。
在你的onResume()方法中,你回读了这些值,你当然会将它们保存在onPause()中。这还可以让您处理某些情况,例如,电话呼入或用户切换到其他应用的位置,即使只是片刻。
答案 1 :(得分:4)
当你的应用程序在后台并且操作系统决定要回收内存时,它可能会终止进程。在这种情况下,当您返回应用程序时,将重新创建该过程,并且您的静态变量将被取消初始化。
如果您想保留重要内容,请将它们放在SharedPreferences
,数据库中,或根据您的需要将它们序列化到文件中。