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