Service 生命周期测试表

作者: sunnyaxin | 来源:发表于2018-04-25 19:56 被阅读51次

近期在研究四大组件之一Service的底层代码原理,发现在bindService时其flag设置为BIND_ABOVE_CLIENT与否对Service整个生命周期有着不同的影响,故自己写了一个小的demo,对应其不同的生命周期调用输出不同的Log,并进行不同的输入序列验证对生命周期的理解,感觉还挺好玩的,虽然在实际业务中同一个client可能不会这样同时进行start或bind,但业务比较复杂,且service连接不同的client时,还是有可能发生这些“奇怪”的组合的,下面对我整理的操作顺序和对应的生命周期调用总结如下,建议只看第一列,心中有了答案之后再看后面的答案,如果实在不信可以下载下面的代码自己动手验证哦~

一起来看看你是否真正理解了Service生命周期吧~

验证表

操作顺序 无BIND_ABOVE_CLIENT标志位 有BIND_ABOVE_CLIENT标志位
START-STOP (create - start) - destroy (create - start) - destroy
START-BIND-STOP (create - start) - bind - (unbind - destroy) (create - start) - bind - ×
START-BIND-UNBIND-STOP (create - start) - bind - unbind - destroy (create - start) - bind - unbind - destroy
START-BIND-STOP-UNBIND (create - start) -bind - (unbind - destroy) - ERROR (create - start) - bind - × - (unbind - destroy)
BIND-START-UNBIND-STOP × - (create - bind - start)- unbind - destroy (create - bind) - start - unbind - destroy
BIND-UNBIND ×- × (create - bind) - (unbind - destroy)
BIND-STOP × - × (create - bind) - ×
BIND-START-STOP × - (create - bind - start) - (unbind - destroy) (create - bind)-start - ×
BIND-START-STOP-UNBIND × - (create - bind- start) - (unbind - destroy) - × (create - bind)- start - × - (unbind - destroy)

Tips:

  1. stopService() 方法
    • 对BIND_AUTO_CREATED,不做任何事情,只做标记(做stopped标记)
    • 对非BIND_AUTO_CREATED,将所有的connection全部unbind,然后destroy
  2. bindService() 方法
    • 对BIND_AUTO_CREATED,在bind的同时,先create
    • 对非BIND_AUTO_CREATED,不做任何事情,只标记(做waiting标记,并存到waitingMap中,等到该service被create后,再遍历该waitingMap,并bind)

Demo验证GITHUB地址

https://github.com/sunnyaxin/ServiceLifecycleDojo

相关文章

网友评论

    本文标题:Service 生命周期测试表

    本文链接:https://www.haomeiwen.com/subject/yahslftx.html