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保存起來,完成註冊任務。