【发布时间】:2019-04-03 14:12:29
【问题描述】:
我正在编写我的第一个独立 Android 应用。它将位于后台并响应操作系统生成的一些事件,根据用户的不同,在一天几次到一周几次之间。
来自 PC 编程背景,我认为我可能需要服务,但 Android Developers > Service 说:
什么是服务?
关于 Service 类的大部分困惑实际上都围绕着它是什么不是:
- 服务不是一个单独的进程。 Service 对象本身并不意味着它在自己的进程中运行;除非另有说明,否则它会在与其所属的应用程序相同的进程中运行。
- 服务不是线程。它本身并不是一种脱离主线程工作的方法(以避免应用程序无响应错误)。
应用程序不需要消耗任何资源,除非它正在侦听的事件之一发生。用户也应该不需要在设置后主动使用应用程序,只有当他们想要更改其设置时。
我的游戏似乎做的事情与我想要的相似。他们坐在后台,可以接收消息(例如,现在轮到我了),当我点击通知时,它会将游戏加载到内存中,这比已经在内存中要多几秒钟。
如果用户一个月没有使用应用程序的界面,我希望它仍然在运行(即使设备已重启)并响应事件但不出现在最近的应用程序列表中(假设一个月的时间足以把它推到最后)。理想情况下,我希望它在一秒钟内响应事件;它不必是近乎即时的。这样做的正常方式是什么?
- 一个应用程序(偶尔使用)和一个单独的“服务”进程/线程(持久性)
- 结合应用和“服务”(持久)
- 一个组合的应用程序和“服务”(通过事件加载到内存中)
【问题讨论】:
-
在后台通知似乎是唯一的方法。在前台,您可以使用 Socket 或一些持久连接您需要检查 Background Execution Limits 。服务不能无限在后台运行。
-
您可以注册事件监听器并在这些事件监听器中启动您的服务。无需服务始终在后台运行