Android:当一个服务被杀死时,我们如何保留服务状态以供以后恢复?

6
我们创建了一个应用,它基本上是一个带有一些功能的计时器/秒表。我们定义了一个服务,该服务会滴答作响并警报已订阅某些计时器事件的听众(活动等)。
我们希望能够在Android杀死我们的服务时保存计时器/秒表的状态(经过的时间、下一个事件的时间、用户提供的配置等),然后在用户恢复应用程序时恢复服务的状态。对我们来说,这可能意味着保留和恢复对象及其状态。我们的服务中有很多组成部分。基本上,我们的服务由所有计时器模型组成,当服务终止时,它们也随之终止。
有哪些策略可以持久化服务的状态?PreferencesManager可能不足以满足我们的需求,但也可能足够。我们可以依赖Service onDestroy()方法保存状态(例如在SQLite中)吗?如果Android决定杀死我们的进程,服务onDestroy()是否得到保证被调用?
谢谢!

如果您有一定数量的状态可以分配一个键,我认为SharedPreferences是最简单的选择。通过直接保存每次更改的值,您可以确保它是可恢复的,即使设备没有干净地关闭(未调用onDestroy)。但是,如果您需要持久化对象,则情况会变得更加复杂,除非这些对象的字段可以保存以便在启动时重新创建它们。 - cYrixmorten
1个回答

12
我们定义了一个服务来打勾并警报已订阅某些计时器事件的监听器(活动等)。
您不需要一直运行服务以观察时钟滴答声。这种方法对用户不友好,因为它会占用系统RAM而没有什么好处。使用AlarmManager在“某些计时器事件”上获取控制权,并在其余时间内将服务保持在内存之外。
我们希望能够保存计时器/秒表的状态(经过的秒数、下一个事件的时间、用户提供的配置等)。请不要持续“经过的秒数”。持久化计时器/秒表开始时的时间。经过的秒数是减法问题。
请勿持久化“下一个事件的时间”。持久化下一个事件的时间。
这些值不会持续变化,因此可以在启动计时器或其他重大生命周期事件时持久化。
有哪些策略可用于保留服务状态? 使用数据库,SharedPreferences或自己选择的文件格式。
我们可以依靠Service onDestroy()方法来保存状态(例如在SQLite中)吗? 不可以。
如果Android决定杀死我们的进程,甚至不能保证service onDestroy()将被调用吗? 不能保证被调用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接