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