一、簡介
完整的客戶端生命週期: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