ActivityManageService管理四大组件
AMS是android中SystemServer进程中的一个线程,单从名字看以为只是管理Activity ,其实AMS是管理四大组件运行状态的系统服务线程。
1.SystemServer进程启动AMS
SystemServer.java中的关键源码,如下:
private void startBootstrapServices() {
// Activity manager runs the show.
mActivityManagerService = mSystemServiceManager.startService(
ActivityManagerService.Lifecycle.class).getService();
mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
}
SystemServiceManager.startService(Class clazz)通过反射的技术的启动Service,关键源码如下
public <T extends SystemService> T startService(Class<T> serviceClass) {
//...
Constructor<T> constructor = serviceClass.getConstructor(Context.class);
service = constructor.newInstance(mContext);
//...
// Register it.
mServices.add(service);
// Start it.
try {
service.onStart();
} catch (RuntimeException ex) {
throw new RuntimeException("Failed to start service " + name
+ ": onStart threw an exception", ex);
}
return service;
}
SystemServiceManager.startService入参是ActivityManagerService.Lifecycle.class,追踪源码,如下
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();
}
public ActivityManagerService getService() {
return mService;
}
}
从源码可以知道Lifecycle封装了AMS还继承了SystemService的功能。Lifecycle构造函数创建了一个AMS对象,调用了AMS的构造函数,关键源码如下:
public ActivityManagerService(Context systemContext) {
mContext = systemContext;
mFactoryTest = FactoryTest.getMode();
mSystemThread = ActivityThread.currentActivityThread();
//创建一个 ServiceThread,TAG
mHandlerThr