gpt4 book ai didi

Android - 如何决定是否在单独的进程中运行服务?

转载 作者:IT王子 更新时间:2023-10-28 23:50:30 25 4
gpt4 key购买 nike

我正在开发一个在多个小时内收集传感器数据的 Android 应用程序。为此,我们有一个服务来收集传感器数据(例如加速度、GPS 等),进行一些处理并将它们远程存储在服务器上。

目前,此服务在单独的进程中运行(在 list 中使用 android:service=":background")。这使 Activity 和服务之间的通信复杂化,但我的前辈以这种方式创建应用程序,因为他们认为将服务与 Activity 分开会使它更稳定。

我想要一些更实际的原因来运行一个单独的进程。有什么优势?它真的运行更稳定吗?如果 Service 在单独的进程中,它是否不太可能被操作系统杀死(以释放资源)?

我们的应用程序使用 startForeground()和 friend ,以尽量减少被操作系统杀死的机会。

Android 文档对此不是很具体,主要是说这取决于应用程序的用途 ;-)

TL;DR 将长期运行的服务置于单独的进程中(在 Android 中)的客观原因是什么?

最佳答案

减少内存使用

Android 开发者文档建议这可能适合降低服务的 RAM 使用率。

来自 Managing Your App's Memory: Use multiple processes :

An example of when multiple processes may be appropriate is when building a music player that plays music from a service for long period of time. If the entire app runs in one process, then many of the allocations performed for its activity UI must be kept around as long as it is playing music, even if the user is currently in another app and the service is controlling the playback. An app like this may be split into two process: one for its UI, and the other for the work that continues running in the background service.

因此,在单独的进程中运行服务可以因此降低应用程序的性能影响,同时还可以降低在系统内存不足时服务被终止的可能性。

降低性能影响

来自 Managing Your App's Memory: Switching Apps :

If your app has a cached process and it retains memory that it currently does not need, then your app—even while the user is not using it—is constraining the system's overall performance. So, as the system runs low on memory, it may kill processes in the LRU cache beginning with the process least recently used, but also giving some consideration toward which processes are most memory intensive.

被杀的可能性降低

来自 Managing Your App's Memory: Release memory as memory becomes tight :

Note: When the system begins killing processes in the LRU cache, although it primarily works bottom-up, it does give some consideration to which processes are consuming more memory and will thus provide the system more memory gain if killed. So the less memory you consume while in the LRU list overall, the better your chances are to remain in the list and be able to quickly resume.

因此,当您的服务位于单独的进程中时,它被杀死的可能性较小,因为该服务不共享 UI 资源,该进程的 RAM 使用量会更小。

何时这样做

如果您的服务不使用 startForeground(),我发现 Android 会在需要释放 RAM 时将其杀死,因此服务的 RAM 消耗并不太重要。因此,如果您只是考虑对操作系统和其他应用程序的性能影响,我认为不值得在单独的进程中运行该服务。

但是,如果您确实使用 startForeground(),Android 会尽量让您的服务保持 Activity 状态,因此进程使用的任何 RAM 会影响操作系统和其他应用程序。所以在这种情况下,我建议使用单独的进程,这样可以节省至少 10MB 的 RAM,这样就不会降低用户设备的速度。

另外,请注意,让您的应用程序实现多进程不容易; Android 的 SharedPreferences 不支持多进程。

关于Android - 如何决定是否在单独的进程中运行服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4658511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com