仅在没有其他工作时才停止后台服务

时间:2018-10-24 13:43:58

标签: android android-service

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

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

我考虑过要在服务中添加某种静态的'nunInstances'并仅停止其中的1个。

另一个选择是保持服务运行。我曾尝试寻找有关其有效性和副作用的信息,但结果是空的。

1 个答案:

答案 0 :(得分:1)

您可以使用IntentService作为工作队列。您可以发送与startService()相关的工作,次数不限。这项工作是一个接一个地连续进行的。完成上一个工作单元后,Service会自行停止。

或者您使用常规的Service并将工作自己排在onStartCommand()中。当您没有其他工作要做时,请致电stopSelf()

注意::Android不会创建多个Service实例。您不必担心正在运行Service的多个实例。如果调用startService()的东西已经运行了Service,则Android 不会创建Service的新实例。它只是在运行的实例上调用onStartCommand(),并将Intent作为参数传递。