從系統看bindService的生命週期

一、簡介

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

二、bindService的流程

在這裏插入圖片描述
8-12 Service的onCreate流程

14-20 Service的onBind流程

22-27 ServiceConnection的connected流程

InnerConnection == LoadedApkServiceDispatcherServiceDispatcherInnerConnection

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章