在一种情况下,由另一个组件启动的一个service
在该组件的主UI线程上运行,而该服务甚至可能存在该组件被销毁,所以我的问题是在哪里执行{{1如果组件已启动service
已停止?
答案 0 :(得分:2)
通常,当您致电startService()
时,该服务将一直保持运行,直到您从其他组件调用stopService()
或从服务本身调用stopSelf()
。 onStartCommand()
始终run on UI thread。
如果该服务正在运行,后续对startService()
的调用将不会创建另一个服务实例,而是会在正在运行的服务上再次运行onStartCommand()
。如果要将组件绑定到服务,则会略有不同。在这种情况下,解除所有组件绑定时会自动销毁该服务。有关详细信息,请参阅:http://developer.android.com/guide/components/services.html#Lifecycle。
此外,请注意保留服务的不同方法,具体取决于you return from the onStartCommand()
:
START_STICKY用于明确启动的服务 根据需要停止,同时START_NOT_STICKY或START_REDELIVER_INTENT 用于仅在处理时保持运行的服务 发送给他们的任何命令。
要具体回答您的问题,在何处以及如何开始服务取决于您想要使用它做什么。如果启动服务的组件停止,则由您决定1)从另一个组件获取对该服务的新引用并将其停止,或者2)从服务本身停止该服务。但是服务不会停止,因为组件确实如此。除非你将它绑定到服务上。