如何使Android的Singleton对象持久化

时间:2012-07-03 21:02:33

标签: java android persistent

在我的应用程序中,我有一个单例类,它与所有活动进行通信并拥有所有应用程序数据。 该对象突然变为空。 当我改变顶级活动(使用意图)时,似乎正在发生这种情况。 有一个简单的方法确保只要我的活动可见,对象就会持续存在。

3 个答案:

答案 0 :(得分:1)

我认为新的顶级活动是在新流程中进行的(在http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle中的行之间阅读。)

Android更有可能杀死生活在后台的活动进程,其中包括顶级活动落后于另一个活动的时间。

我认为一个更好的解决方案可能是让你的Singleton在null时透明地自我初始化,必要时从磁盘加载和保存任何状态(一个非常标准的单例范例)。在新旧活动中,单一实例无法解决您的问题。

编辑:我不相信服务是可行的方式。服务是在电话背景中继续进行活动,而你所谈论的是数据存储和检索。我认为,最自然的方法是让每个活动对于它是否是第一个活动都是健壮的。

答案 1 :(得分:0)

如果是我,我会使用Service而不是单身来管理跨活动共享的应用数据。它会更强大。

有关详细信息,请参阅Services Developer Guide

答案 2 :(得分:0)

您必须使用单例错误,单例对象在应用程序生存期内应该有效。是否重新创建和销毁此应用程序中的活动无关紧要。

但是,如果您的单例引用活动(例如活动上下文,活动变量,如小部件),那么即使单例对象本身仍然有效,这些变量/上下文在某些时候也可能无效。