今天開始我么開始學習ActivityManagerService相關只是,其中包括ActivityManagerService的啟動,應用程序創建,子Activity的創建過程。。。
ActivityManagerService(AMS) 掌握了所有應用程序的創建、管理,所以他在framworks層有著舉足輕重的作用。其實AMS的主要功能就是通過Binder進程間通信與Client進程的ActivityManager通信。在創建Activity之后將其交由ActivityManager來管理。
那么我們者神奇的ActivityManagerService是怎么創建的呢?Gityuan的一篇博客寫得非常的好,很形象的給我講述了AMS的創建過程。我就在這里照貓畫虎稍微解釋一下吧!
相關類簡述:
-
SystemServer.java
本身由zygote進程運行,用來啟動各種各樣的系統服務(SystemService)
-
SystemService.java
運行在系統進程中的service,每個SystemService都是有生命周期的,所有的生命周期函數都是運行在SystemServer的主線程當中。
1.2.1 每個SystemService都有一個參數為Context的構造函數,用來初始化SystemService;
1.2.2 調用onstart()使得SystemService處于運行狀態,在這種狀態下,該SystemService可以通過publishBinderService(String, IBinder) 方法來向外提供服務(binder interface),
1.2.3 在啟動階段onBootPhase(int)會被不停的調用直到運行到PHASE_BOOT_COMPLETED階段(啟動階段的最后階段),在啟動的每一階段都可以完成一些特殊的任務。
-
SystemServiceManager.java
負責管理SystemService的創建、啟動以及其他生命周期函數
在SystemServer中獲取AMS對象,并調用SystemServiceManager對象的方法startService()啟動服務。但是獲取AMS對象其實是在AMS的內部類Lifecycle的getService方法。
mActivityManagerService = mSystemServiceManager.startService( ActivityManagerService.Lifecycle.class).getService();
那么后去這個對象,它都走了哪些初始化工作呢?Gityuan的博客上也有講到,其實就是創建了三個線程:
- ActivityManager
管理Activity - android.ui
初始化程序頁面 - CpuTracker
AMS的內部實現
然后我們會發現這個和前面講到的Binder內部實現是不是很是相似,其實本來就是相同的原理。
在AMS中,每一個應用程序進程都使用一個ProcessRecord對象來描述,而每一個啟動的Activity組件都用一個ActivityRecord對象來描述。