探究Service混合启动时的生命周期

测试Service生命周期的特殊情况

定义四个按钮,一个bindButton一个startButton来分别调用startService和bindService。并在

Service的creat ,bind,starCommend 中打印日志。还有两个unBIndButton和stopButton用来取消绑定和结束Service。

1.直接绑定 执行onCreat,onBind

2.直接启动 执行onCreat,onStartCommand

3.绑定后启动 执行onStartCommand

4.启动后绑定 执行onBInd

5.绑定后再次绑定 不执行任何操作

6.启动后启动 执行onStartCommadn

7.启动后结束 执行onDestroy

8.多次启动后结束 执行onDestroy

9.绑定后启动再解绑 执行onUnbind但不执行onDestroy

10,绑定后启动再结束 不执行任何操作

11,绑定后启动再解绑后结束 执行onDestroy

12, 绑定后启动再结束后解绑 执行onUnbind onDestroy

13,之后测试的先启动再绑定的结束过程和绑定再结束相同。

由以上测试可得出结果。Service共有三种生命周期。

bindService:  onCreat -> onBind -> onUnbind ->onDestroy

startService: onCreat - > onStartCommend ->onDestroy

混合使用:onCreat-> onBind -> onStartCommend -> onUnbind ->onDestroy

首先可以确定的时onCreat,onDestory以及onBInd在一个Service生命周期中只会执行一次。

只使用bindService时,生命周期与绑定的Activity相关,若多个Activity同时与其绑定只有第一个绑

定时会触发onBind其他的只会执行ServiceConnection中的onServiceConnected。而解绑时只有最后一个解除绑定时才会触发onUnbind。

只使用StartService时的Service生命周期时最简单的,第一次调用时会执行onCreat和onStartCommand,之后再次调用只会执行onStartCommand,而不管启动几次只要调用一次stopService就会执行onDestroy。

混合启动时的生命周期是最复杂的。首先可以任意次的调用bindService和startService。但是和单

独使用的情况一样。当是结束时要同时满足双方的要求,无任何绑定以及执行Stop。

具体情况上面已经测试过了这里讲一下规律以及更特殊的情况,首先是结束时onUnbind一定先

于onDestory执行,尽管先调用的stop。其次更特殊的情况就是在执行完unbind方法后重新去调用bindService,onBind方法不会执行但是执行ServiceConnection中的onServiceConnected,这时再去调用stop也不会结束Service。而必须等待解绑时才会执行onDestory,同时结束时也不会执行onUnbind而是只执行onDestory。

可见onBind和onUnbind只会执行一次。而且混合启动时必须同时满足两个结束条件。具体原因

因为源码过于复杂就不继续探究了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值