Android AMS 與 APP 進程通信

概述

在 Android 中,APK 運行在 App 進程,而 AMS 運行在 system_server 進程,AMS 承擔着對 Activity 的生命週期的管理等工作,而 Activity 生命週期函數的回調又是在 App 進程中進行的,App 進程需要頻繁的和 AMS 進程進行通信。那麼理解 AMS 進程和 App 進程之間的通信就對 Activity 的啓動流程的理解有很好的鋪墊作用。因此在介紹 Activity 的啓動流程之前我們先來學習一下 AMS 進程和 App 進程之間是如何通信的。
提起到 Android 進程間通信,我們自然就想到了 Binder。是的,AMS 和 APP 之間肯定也是通過 Binder 進行通信的。下面進行詳細的介紹。
本文涉及到的類包含:

frameworks/base/core/java/android/app/ActivityManagerNative.java
frameworks/base/core/java/android/app/ActivityManagerNative$ActivityManagerProxy.java
frameworks/base/core/java/android/app/ApplicationThreadNative.java
frameworks/base/core/java/android/app/ApplicationThreadNative$ApplicationThreadProxy.java
frameworks/base/core/java/android/app/ActivityThread.java
frameworks/base/core/java/android/app/ActivityThread$ApplicationThread.java

相關類關係圖

進程間通信

下面通過一個圖來表示一下 AMS 和 APP 的通信,該圖片摘自Weishu Note,描述的很好,直接拿來用來。

在 App 進程側,App 進程作爲Binder的客戶端當發起啓動 Activity 時,通過作爲服務端的代理對象的 ActivityManagerProxy 來發起遠程調用,此時 system 進程作爲服務端,ActivityManagerNative 作爲 Binder 本地對象收到遠程調用後,由它的實現類 ActivityManagerService 完成相應的生命週期管理以及任務棧管理後,會把控制權交給App進程,讓App進程完成Activity類對象的創建,以及生命週期回調。
接下來的調用 system 進程作爲客戶端,App 進程作爲服務端,通過system進程作爲服務端的代理對象的 ApplicationThreadProxy發起調用,ApplicationThread 作爲服務端的 Binder 本地對象收到遠程調用後,通過 Handler 發送消息由 ActivityThread 進程處理。
瞭解了這些知識後再看Android startActivity 流程分析的流程圖,會有助於理解

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