Service啟動和綁定過程

  • 2019 年 10 月 7 日
  • 筆記

-諸如此類的四大組件的啟動過程經常在面試中被問到

*Service啟動過程*

第一步:ContextImpl到ActivityManagerService的調用過程

第二步:ActivityThread啟動Service

1)ProcessRecord主要用來描述運行的應用程式進程的資訊

2)LoadedApk是一個APK文件的描述類

*Service綁定過程*

第一步:ContextImpl到AMS的調用過程

第二步:Service的綁定過程

1)幾個與Service相關的對象類型

  * ServiceRecord  用於描述一個Service

  * ProcessRecord  一個進程的資訊

  * ConnectionRecord  用於描述應用程式進程和Service建立的一次通訊

  * AppBindRecord  應用程式進程通過Intent綁定Service時,會通過AppBindRecord來維護Service與應用程式進程之間的關聯。其內部存儲了誰綁定的Service(ProcessRecord)、誰綁定的Service(AppBindRecord)、綁定Service的Intent(IntentBindRecord)和所有綁定通訊記錄的資訊(ArraySet<ConnectionRecord>)

  * IntentRecord  用於描述綁定Service的Intent

2)bindService方法內部會啟動Service

3)ServiceDispatcher是LoadedApk的內部類,InnerConnection的connected方法內部會調用H的post方法向主執行緒發送消息,並且解決當前應用程式進程和Service跨進程通訊的問題

1)IServiceConnection,它是ServiceConnection在本地的代理,用於解決當前應用程式進程和Service跨進程通訊的問題,具體實現為ServiceDispatcher.InnerConnection