【发布时间】:2011-06-07 05:00:14
【问题描述】:
我正在开发一个在多个小时内收集传感器数据的 Android 应用程序。 为此,我们有一个服务来收集传感器数据(例如加速度、GPS 等),进行一些处理并将它们远程存储在服务器上。
目前,此服务在单独的进程中运行(在清单中使用 android:service=":background")。这使活动和服务之间的通信变得复杂,但我的前辈以这种方式创建应用程序,因为他们认为将服务与活动分开会使它更稳定。
我想要一些更实际的原因来运行一个单独的进程。有什么优势?它真的运行更稳定吗?如果 Service 在单独的进程中,它是否不太可能被操作系统杀死(以释放资源)?
我们的应用程序使用startForeground() 和朋友来最大程度地减少被操作系统杀死的机会。
Android 文档对此不是很具体,主要是说这取决于应用程序的用途 ;-)
TL;DR 将长期运行的服务放在单独的进程中(在 Android 中)的客观原因是什么?
【问题讨论】:
-
我认为你的意思是 android:process=":background"。我们将服务与活动分开的主要原因是防止可怕的 ANR(活动无响应)。缺点是 IPC 变得有点棘手,并且额外进程的开销。
-
请注意,通过在最近的应用程序中滑动关闭应用程序也会终止服务,即使它在单独的进程中运行也是如此。这极大地影响了在其服务中运行外部程序的应用程序。 (使用 Android 4.3.1 观察,根据 Freenode 上的#android 似乎是“设计”的。)
-
@Lekensteyn,我的索尼 Xperia M 运行 Android 4.3、5.0 和 5.1 的情况并非如此。你的设备是什么型号的?也许这取决于实现。
-
@sam 这可能是运行 CyanogenMod 的三星 Galaxy S3 (i9300)。
-
@Lekensteyn 知道即使在用户将服务滑开后如何保持服务运行?保持运行;不重启