本文簡要介紹AMS對象創建過程。
備註:基於android5.0代碼,主要以僞代碼的形式介紹啓動流程,詳細過程參考本文移步android源碼。
AMS 由SysterServer.java的ServerThread線程創建,本文以此爲起點分析AMS啓動過程。
1. AMS繼承ActivityManagerNative,並實現了Watchdog.Monitor和BatteryStatsImpl.BatteryCallback接口;ActivityManagerNative 繼承Binder,實現了IActivityManager;
2. 客戶端使用ActivityManager類通過內部調用ActivityManagerNative的getDefault方法得到一個ActivityManagerProxy代理對象來和AMS交互。
圖 1. AMS繼承關係圖
1、 AMS創建
1.1 SystemServer.java::main()
/**
* The main entry point from zygote.
*/
public static void main(String[] args) {
new SystemServer().run();
}
1.2 SystemServer.java::run()
<pre name="code" class="java"> private void run() {
// Start services.
try {
startBootstrapServices();
} catch (Throwable ex) {
......
}
1.3 SystemServer.java:: startBootstrapServices()
<pre name="code" class="java"> private void startBootstrapServices() {
......
mActivityManagerService = mSystemServiceManager.startService(
ActivityManagerService.Lifecycle.class).getService();
......
}
備註:該部分代碼設計SystemServer啓動,以及SystemServer創建上下文等過程,後續分析SystemServer部分再詳細討論,此處僅需要知道通過該方法調用
會返回一個創建好的AMS對象
1.4 ActivityManagerService.Lifecycle
public Lifecycle(Context context) {
super(context);
mService = new ActivityManagerService(context);
}
在Lifecycle的構造方法中,創建了AMS對象。
本節作爲AMS分析的初步,下一節繼續分析AMS和SystemServer相關內容。