Service 生命周期测试表

近期在研究四大组件之一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

    原文作者:sunnyaxin
    原文地址: https://www.jianshu.com/p/e413cd00c92e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞