【发布时间】:2011-06-20 08:27:56
【问题描述】:
我有一个启动服务的活动。还有一个单身Data 参与其中。当我通过转到主屏幕关闭活动时,Data 单例会在一段时间后被销毁,但是,服务应该继续运行。于是Data的部分字段又变成null,服务遇到空指针。
我怎样才能防止这种情况发生?
【问题讨论】:
标签: android service android-activity singleton
我有一个启动服务的活动。还有一个单身Data 参与其中。当我通过转到主屏幕关闭活动时,Data 单例会在一段时间后被销毁,但是,服务应该继续运行。于是Data的部分字段又变成null,服务遇到空指针。
我怎样才能防止这种情况发生?
【问题讨论】:
标签: android service android-activity singleton
据我所知,Activity 实例会在它们自己的类加载器中启动,以确保安全。由于加载 Activity 而附加到类的任何单例都与该类加载器相关联,而该类加载器又与活动生命周期相关联。
也就是说,我认为你不能保证这不会发生,因此不应该依赖它。
您需要序列化任何持久状态,然后在Activity 启动时将其反序列化。
【讨论】:
onPause() 中序列化您的数据并在onResume() 中恢复它,然后让任何依赖类在您的活动中访问Data 的托管实例。
我们实现此目的的一种方法是将对象的引用存储在您创建的Application 的子类中。这是一个简单的解决方法,在大多数情况下都有效,无需创建 Service 或必须一直序列化状态。
【讨论】: