我想知道是否有可能有一个以startService启动的服务,然后能够绑定到该服务并执行一些远程过程调用?根据这个:http://developer.android.com/guide/topics/fundamentals.html#servlife
这两种服务有不同的生命周期,所以不可能,有人知道吗?
Fal*_*rri 91
我认为哈拉的回答有点令人困惑.你所描述的是完全合法的,事实上是获得你想要的行为的唯一方法.如果通过绑定到它来创建服务,则在解除绑定时它将会死亡.因此,没有活动绑定它的唯一方法是使用startService()启动它.与生命周期没有冲突,因为它仅适用于服务的启动方式.所以一旦它从startService()开始,就会遵循生命周期过程.所以你可以随心所欲地绑定和取消绑定它,它只会在你调用stopService()或stopSelf()时死掉
Yul*_*mok 13
是的,您可以启动并绑定(一次或多次)相同的服务.
以下流程图演示了如何管理服务的生命周期.变量计数器跟踪绑定客户端的数量:

很好的例子 - 音乐应用.从说明建立一个媒体浏览器服务官方教程:
只有绑定(并且未启动)的服务在其所有客户端解除绑定时销毁.如果此时UI活动断开连接,则服务将被销毁.如果您还没有播放任何音乐,这不是问题.但是,当播放开始时,用户可能希望在切换应用后继续收听.当您取消绑定UI以使用其他应用程序时,您不希望销毁播放器.
因此,您需要确保通过调用startService()开始播放服务时启动该服务.无论是否绑定,必须明确停止已启动的服务.即使控制UI活动解除绑定,这也可确保您的播放器继续执行.
要停止已启动的服务,请调用Context.stopService()或stopSelf().系统会尽快停止并销毁服务.但是,如果一个或多个客户端仍然绑定到该服务,则停止该服务的调用将延迟,直到其所有客户端解除绑定.
来自服务参考:
服务既可以启动,也可以绑定连接.在这种情况下,只要系统启动或者使用Context.BIND_AUTO_CREATE标志有一个或多个连接,系统就会保持服务运行.一旦这些情况都不成立,就会调用服务的onDestroy()方法并有效终止服务.
har*_*ara 10
如果使用startService()启动服务,则应使用stopService()停止它.
系统可以运行服务有两个原因.如果有人调用Context.startService(),那么系统将检索服务(创建它并在需要时调用其onCreate()方法),然后使用客户端提供的参数调用其onStartCommand(Intent,int,int)方法.此服务将在此时继续运行,直到调用Context.stopService()或stopSelf().请注意,对Context.startService()的多次调用不会嵌套(尽管它们会导致多次对onStartCommand()的相应调用),因此无论启动多少次,一旦Context.stopService()或stopSelf将停止服务() 叫做; 但是,服务可以使用其stopSelf(int)方法来确保在处理启动的意图之前不会停止服务.
您可以使用bindService()将所需的ServiceConnection绑定到服务,但要注意传递给它的标志.如果你传递0然后如果你调用stopService(),服务将停止(我不知道你的ServiceConnection会发生什么).否则,如果您希望服务保持活动状态,直到将ServiceConnection绑定到它,则使用BIND_AUTO_CREATE.
这是来自stopService():
请求停止给定的应用程序服务.如果服务没有运行,则没有任何反应.否则它会停止.请注意,不计算对startService()的调用 - 无论启动多少次,都会停止服务.
请注意,如果停止的服务仍然具有绑定到它的ServiceConnection对象并且设置了BIND_AUTO_CREATE,则在删除所有这些绑定之前不会销毁它.有关服务生命周期的更多详细信息,请参阅服务文档.
如果您没有权限停止给定服务,则此函数将抛出SecurityException.
我希望这有帮助..
| 归档时间: |
|
| 查看次数: |
53536 次 |
| 最近记录: |