service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径:
A started service
被开启的service通过其他组件调用 startService()被创建。这种service可以无限地运行下去,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它。当service被停止时,系统会销毁它。
A bound service
被绑定的service是当其他组件(一个客户)调用bindService()来创建的。客户可以通过一个IBinder接口和service进行通信。客户可以通过 unbindService()方法来关闭这种连接。一个service可以同时和多个客户绑定,当多个客户都解除绑定之后,系统会销毁service。
然而这两条路径并不是完全分开的,他们可以混合存在。
就是说你可以和一个已经调用了startService(),而被开启的service进行绑定。例如一个后台音乐service可能因调用 startService()方法而被开启了。稍后,可能用户想要控制播放器或者得到一些当前歌曲的信息,可以通过bindService()将一个activity和service绑定。这种情况下,stopService()或 stopSelf()实际上并不能停止这个service,除非所有的客户都解除绑定。(下图描述了这种情况)
Service混合生命周期(来自网络)提示:
如果Service解绑的时候onUnbind()方法返回为true,(注意看图,要客户端全部解绑才行)那么下一次客户端绑定的时候Service会调用onRebind(Intent intent),客户端仍然会在它的onServiceConnected()回调方法中得到 IBinder 对象。
网友评论