Android四大組件的工作過程
時間 2021-07-11
標籤
Android學習
概述
這裏只分析一般過程,不涉及具體的源碼分析。
Activity的啓動過程
- 很明顯,Activity的啓動過程涉及到了IPC,其實四大組件的啓動過程都和IPC有關。
- ActivityManagerService、ApplicationThread都是Binder,ApplicationTread完成了大量的Activity和Service的啓動/停止相關的功能。
- Handler H對消息的處理會調用
handleLaunchActivity()
->performLaunchActivity()
得以最終完成Activity的創建和啓動。
Service
Service的啓動過程
Service綁定過程
- ContextImpl是Context的具體實現,通過Activity.attach()和Activity建立關聯,是典型的橋接模式。
- ServiceRecord貫穿整個Service的啓動過程。
- 與Activity的啓動過程類似,與AMS發生了IPC,最後回到ApplicationThread中,通過發送消息給H來完成最終的啓動。
ContentProvider
ContentProvider的啓動過程
ContentProvider的query過程
- 當ContentProvider所在的進程啓動時,ContentProvider會同時啓動併發布到AMS中。這時ContentProvider的
onCreate
要先於Application的onCreate
而執行。
- 一般ContentProvider都是單實例的,這時由
android:multipleprocess
屬性決定的,默認爲false
。
- 訪問ContentProvider需要ContentResolver,其真正實現類是ApplicationContentResolver。當ContentProvider所在進程未啓動時,第一次訪問它會觸發ContentProvider的創建以及進程啓動。
BroadcastReceiver
廣播註冊過程
廣播接收/發送過程
- 靜態註冊和其他三大組件的註冊在應用安裝時由系統自動完成,具體來說是由PMS(PackageManagerService)來完成的。
- 動態註冊廣播最終會跨進程交給AMS,並把遠程Receiver( 實際上傳的是IIntentReceiver,是個Binder )對象和遠程IntentFilter保存起來,完成註冊任務。