只有在没有更多工作时才停止后台服务

Stop background service only if no more work

我在后台使用 ContentResolver 处理意图的服务。 每个新的意图调用都会启动服务,一旦处理结束,服务就会自行停止。

这会产生一个问题,即新意图启动服务 运行 但之前的服务 运行 仍在处理,导致新的 运行 在其处理结束之前被杀死。

我考虑过在服务中添加某种静态 'nunInstances' 并仅在它为 1 时停止它。

另一种选择是离开服务 运行ning。我尝试寻找有关它的有效性和副作用的信息,但一无所获。

您可以使用 IntentService,它充当工作队列。您可以根据需要多次发送与 startService() 相关的工作。这项工作是连续进行的,一个接一个。当完成最后一个工作单元时,Service 自行停止。

或者您使用常规 Service 并自己在 onStartCommand() 中排队工作。当你没有更多工作要做时,你调用 stopSelf().

注意: Android 不会创建多个 Service 实例。您不必担心 Service 运行 有多个实例。如果调用 startService() 并且 Service 已经是 运行,Android 不会 创建 [=12= 的新实例].它只是在 运行 实例上调用 onStartCommand() 并将 Intent 作为参数传递。