只有在没有更多工作时才停止后台服务
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
作为参数传递。
我在后台使用 ContentResolver
处理意图的服务。
每个新的意图调用都会启动服务,一旦处理结束,服务就会自行停止。
这会产生一个问题,即新意图启动服务 运行 但之前的服务 运行 仍在处理,导致新的 运行 在其处理结束之前被杀死。
我考虑过在服务中添加某种静态 'nunInstances' 并仅在它为 1 时停止它。
另一种选择是离开服务 运行ning。我尝试寻找有关它的有效性和副作用的信息,但一无所获。
您可以使用 IntentService
,它充当工作队列。您可以根据需要多次发送与 startService()
相关的工作。这项工作是连续进行的,一个接一个。当完成最后一个工作单元时,Service
自行停止。
或者您使用常规 Service
并自己在 onStartCommand()
中排队工作。当你没有更多工作要做时,你调用 stopSelf()
.
注意: Android 不会创建多个 Service
实例。您不必担心 Service
运行 有多个实例。如果调用 startService()
并且 Service
已经是 运行,Android 不会 创建 [=12= 的新实例].它只是在 运行 实例上调用 onStartCommand()
并将 Intent
作为参数传递。