从系统看bindService的生命周期

    技术2022-07-11  116

    一、简介

    完整的客户端生命周期:onCreate() → onBind() → unbindService → onUnbind() → onDestroy()

    二、bindService的流程

    8-12 Service的onCreate流程

    14-20 Service的onBind流程

    22-27 ServiceConnection的connected流程

    InnerConnection == LoadedApk S e r v i c e D i s p a t c h e r ServiceDispatcher ServiceDispatcherInnerConnection

    bindServiceLocked

    一些flags的校验retrieveServiceLocked 检索Service查看app是否需要permission review,需要则启动相应的actiivty,并处理callback调用ServiceRecord的retrieveAppBindingLocked检索,并创建ConnectionRecordbringUpServiceLocked 拉起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

    Processed: 0.011, SQL: 9