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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容

  • 1.什么是Activity?问的不太多,说点有深度的 四大组件之一,一般的,一个用户交互界面对应一个activit...
    JoonyLee阅读 11,012评论 2 51
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,665评论 2 45
  • 我采访的对象是我的好姐妹:夏晨阳 她热爱跆拳道,得到过许多的奖项,但是,在这光彩耀人的身影背后,却有着无数的...
    女汉纸_也会伤阅读 1,573评论 0 0
  • 这周读完了武志红的《感谢不完美的自己》,深有启发:之前一直对自己默言,要正视矛盾,化解矛盾,两人之间的感情才能进一...
    王信泽阅读 1,592评论 0 0
  • 我总是这样的慌乱 为说出来的和没说出来的感到羞愧 我想用一个烧杯 装下脱口而出的话语 烧杯壁上的刻度 清晰地提醒我...
    草籽阅读 2,895评论 0 6