我的问题
我有一个服务,我在其中监控位置变化。它至关重要,它在后台运行时保持运行,因此它是一个前台服务。
我的问题是它在后台并且事情正在被破坏,我该如何保存这些数据。
我的问题
这让我了解了我的潜在解决方案。
我有一个Application
的子类,我在清单文件中声明。
是否可以安全地看到存储在此Singleton
中的所有对象都可以在Service
生命期内访问,从而为我提供了保存位置的方法?
提前致谢
答案 0 :(得分:2)
对你的问题的简短回答是肯定的,Application
基本上只要你的过程存在就会存在,所以你存储的任何内容都会像在内存中一样稳定,直到Android可能需要回收你的来自后台的应用程序为前台应用程序获取更多内存。但是,仅仅在Service
本身内保存状态数据就没有太大的好处。 Android没有一种机制可以选择性地销毁应用程序中 的组件来回收内存。如果它需要额外的内存来保持前台进程的满意,它只会按优先级顺序杀死其他应用程序的整个进程(基于最近的使用及其前台/后台优先级状态)。
通过在您的流程中运行Service
,您的应用程序已经将其优先级提升为比后台系统中的其他应用程序更重要,从而降低了您的进程被杀的可能性。通过将Service
作为前景运行,您只是稍微提高了此优先级,而这并不是Google建议您长时间执行的操作。当系统受到足够的内存压力以至于应用程序开始被杀死时,最终你的进程将遭受同样的命运。
如果您真的需要任何数据超出流程的生命周期,则需要将其保留为Android的任何本地存储格式。
答案 1 :(得分:1)
我会说不。即使您有一个静态类,其中包含您正在设置的静态变量,也无法保证操作系统在任何时候都不会随意终止您的进程。也许99%的时间你所说的可能有用,但在我看来它不是一个可靠的解决方案。
您应该按照建议将任何重要数据存储在数据库或Android首选项中,这对您的应用程序/数据来说更合乎逻辑。
答案 2 :(得分:0)
Application
对象是Android生命周期中持续时间最长的对象。所以是的,它的寿命至少和你的Service
一样长。不过,我不确定它如何帮助你保存任何东西。一旦Android杀死了您的流程 - 而且它将在某个时刻,前台服务或否 - 您仍需要在下次创建Service
时重新加载或重新创建数据。