第一种情况
startService
情况1:app1 (startService),app1(stopService),app2(startService)
生命周期:onCreate — onStartCommand—onDestroy—onCreate — onStartCommand
说明:没有其他app绑定到服务的情况下,service 就像一面没有门的墙。第一次要穿过这面墙,就必须创建一扇门( onCreate ),然后再过后(onStartCommand),续要再穿过就只需直接过(onStartCommand)…n次。如果有人把这个门封了(stopService,onDestroy),那这这个门就消失了,后续再需要通过就要重新创建一扇新的门(onCreate )
按照上面的原理可以知道
情况2:app1 (startService),app2(startService),app1(stopService),app2(startService)
生命周期:onCreate(app1)— onStartCommand(app1)—onStartCommand(app2)—onDestroy(app1)—onCreate(app2)— onStartCommand(app2)
bindService
情况3:app1 (bindService),app1(unbindService),app2(bindService)
生命周期:onCreate(app1) — onBind(app1)—onUnbind(app1返回false)—onDestroy(app1)—onCreate(app2) — onBind(app2)
情况4:app1 (bindService),app2(bindService),app1(unbindService),app2(unbindService)
生命周期:onCreate(app1) — onBind(app1)—app2(bindService 不触发生命周期)—app1(unbindService 不触发生命周期 )–onUnbind(app2)—onDestroy(app2)
onUnBind()回调条件:
- 最后一个绑定在服务上的客户端解绑之后,此时服务上面没有任何绑定的客户端,则会调用onUnBind(),至于后续会不会马上调用onDestroy()是根据:当前有没有其他客户端startService且还没调stopService,如下:
- 后续情况1:若没有,则调用onDestroy()
- 后续情况2:若有,否则不调用onDestroy()
onDestroy() 回调条件:
- 当调stopService的时候,当前没有任何绑定的客户端
- 当调unbindService的时候,当前没有其他绑定的客户端,且没有客户端startService且当前还未stopService
onRebind() 回调条件:
- 当onUnBind()情况出现之后,而且onUnBind()返回值是true,且后续情况2的时候,也就是说没有服务绑定在service上面,且服务还没停止的时候,再次bind会回调onRebind 方法