Android 服务生命周期

第一种情况

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 方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值