从系统看bindService的生命周期
一、简介
完整的客户端生命周期:onCreate() → onBind() → unbindService → onUnbind() → onDestroy()
二、bindService的流程
8-12 Service的onCreate流程
14-20 Service的onBind流程
22-27 ServiceConnection的connected流程
InnerConnection == LoadedApkInnerConnection
bindServiceLocked
- 一些flags的校验
- retrieveServiceLocked 检索Service
- 查看app是否需要permission review,需要则启动相应的actiivty,并处理callback
- 调用ServiceRecord的retrieveAppBindingLocked检索,并创建ConnectionRecord
- bringUpServiceLocked 拉起Service
requestServiceBindingLocked
- 发送bind超时消息
- 强制提升app的优先级到PROCESS_STATE_SERVICE
- 让客户端开启bind流程
三、unbindService的流程
5-8 Service的onUnbind流程 ,当存在多个进程采用同一个intent bind某个service,那么必须等到所有的进程都执行了unbind操作,才能真正unbind。
11-16 ServiceConnection的disconnected流程
17-20 Service的onDestroy的流程 , 当service是通过startService方式所启动,那么必须通过stopService或者stopSelf()才能destroy该服务,任何的unbindService 是无法destroy该服务;
当servce时通过bindService带有flags Context.BIND_AUTO_CREATE方式启动的,那么unbind过程会判断如果该service的其他ConnectionRecord都不存在设置BIND_AUTO_CREATE,则会直接destroy该service;如果存在一个,则不会destroy