1:前言
前文《Android源码阅读分析:从Activity开始(一)——启动流程》中我简单地讲解了Activity是如何被启动的。其中涉及到了ActivityManagerService。在Android系统中,ActivityManagerService(下文中我们都简称为AMS)是管理Android四大组件的核心,其重要性不言而喻。那么,从本篇文章就开始分析AMS的源码,理解其内部的逻辑。
2:AMS对象初始化
我们要分析一个问题,首先就要从这个问题的源头来分析起。所以,我们先看一下ams是如何被创建起来的。
经过查找,发现ams最初的创建位置在SystemServer的startBootstrapServices方法内。
(frameworks/base/servces/java/com/android/server/SystemServer.java)
private void startBootstrapServices() {
...
// 启动Activity Manager
mActivityManagerService = mSystemServiceManager.startService(ActivityManagerService.Lifecycle.class).getService();
mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
mActivityManagerService.setInstaller(installer);
...
// 为系统进程创建并启动Application实例
mActivityManagerService.setSystemProcess();
...
}
该方法表示通过SystemServiceManager
的startService
方法,启动Lifecycle
后获取服务。然后为系统进程创建并启动Application实例。
Lifecycle
是AMS
的内部静态类
(frameworks/base/servces/core/java/com/android/server/am/ActivityManagerService.java)
public static final class Lifecycle extends SystemService {
private final ActivityManagerService mService;
public Lifecycle(Context context) {
super(context);
mService = new ActivityManagerService(context);
}
@Override
public void onStart() {
mService.start();
}
@Override
public void onCleanupUser(int userId) {
mService.mBatteryStatsService.onCleanupUser(userId);
}
public ActivityManagerService getService() {
return mService;
}
}
到这么可以看出Lifecycle类的作用,就是在ActivityManagerSerivce与SystemService之间充当适配器的作用
再返回来看一下SystemServiceManager
的startService
方法做了什么
(frameworks/base/services/core/java/com/android/server/SystemServiceManager.java)
public <T extends SystemService> T startService(Class<T> serviceClass) {
try {
final String name = serviceClass.getName();
...
final T service;
try {
Constructor<T> constructor = serviceClass.getConstructor(Context.class);
service = constructor.newInstance(mContext);
}
...
startService(service);
return service;
}
...