如何使 Android 的 Singleton 对象持久化
Posted
技术标签:
【中文标题】如何使 Android 的 Singleton 对象持久化【英文标题】:How do I make Android's Singleton object persistent 【发布时间】:2012-07-03 21:02:33 【问题描述】:在我的应用程序中,我有一个与所有活动通信并拥有所有应用程序数据的单例类。 突然之间,对象开始变为空。 当我更改***活动(使用意图)时,它似乎正在发生。 是否有一种简单的方法可以确保只要我的活动可见,对象就会持续存在。
【问题讨论】:
【参考方案1】:我认为一个新的***活动是在一个新流程中进行的(阅读http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle 中的行间)。
Android 更有可能杀死处于后台的 Activity 进程,其中包括*** Activity 落后于另一个时。
我认为更好的解决方案可能是让您的 Singleton 在为 null 时透明地自行初始化,如有必要,从磁盘加载和保存任何状态(非常标准的单例范例)。没有办法通过跨新旧活动的单个实例来解决您的问题。
编辑:我不相信服务是要走的路。服务用于在手机后台进行活动,而您所说的是数据存储和检索。我认为,最自然的方法是让每个 Activity 对其是否是第一个 Activity 都具有鲁棒性。
【讨论】:
【参考方案2】:如果是我,我会使用 Service
而不是单例来管理跨活动共享的应用数据。它会更加健壮。
请参阅Services Developer Guide 了解更多信息。
【讨论】:
我对安卓很陌生。在我的场景中,我正在制作一个基于点击的游戏。所以在每次输入时,单例对象都会进行一些处理并向用户呈现新的活动。我如何用服务做到这一点。你也可以给我链接阅读服务。 Service 是一个应用程序组件,可以在后台执行长时间运行的操作,不提供用户界面。这如何解决应用中的数据持久性问题?【参考方案3】:您一定是错误地使用了单例,单例对象在应用程序生命周期内应该是有效的。是否重新创建和销毁此应用程序中的活动并不重要。
但是,如果您的单例正在引用活动(例如,活动上下文、小部件等活动变量),那么即使单例对象本身仍然有效,这些变量/上下文也可能在某些时候无效。
【讨论】:
以上是关于如何使 Android 的 Singleton 对象持久化的主要内容,如果未能解决你的问题,请参考以下文章