本文简要介绍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相关内容。