ATMS和AMS是systemServer进程的两个服务,它们的启动分析如下。 本文以Android 13代码为例。
1,在frameworks/base/services/java/com/android/server/SystemServer.java中
public final class SystemServer implements Dumpable {
private SystemServiceManager mSystemServiceManager;
/**
* The main entry point from zygote.
*/
public static void main(String[] args) {
new SystemServer().run();
}
private void run() {
Looper.prepareMainLooper();
createSystemContext(); // 加载系统资源
mSystemServiceManager = new SystemServiceManager(mSystemContext);
startBootstrapServices(t); // 启动引导服务
Looper.loop();
}
private void startBootstrapServices(@NonNull TimingsTraceAndSlog t) {
t.traceBegin("StartActivityManager");
// TODO: Might need to move after migration to WM.
ActivityTaskManagerService atm = mSystemServiceManager.startService(
ActivityTaskManagerService.Lifecycle.class).getService();// 启动ATMS
mActivityManagerService = ActivityManagerService.Lifecycle.startService(
mSystemServiceManager, atm);// 启动AMS
mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
mActivityManagerService.setInstaller(installer);
mWindowManagerGlobalLock = atm.getGlobalLock();
t.traceEnd();
// Set up the Application instance for the system process and get started.
t.traceBegin("SetSystemProcess");
mActivityManagerService.setSystemProcess(); //将AMS加入到ServiceManager中
t.traceEnd();
}
}
上面的代码调用了SystemServiceManager类的startService函数。
2,在frameworks/base/services/core/java/com/android/server/SystemServiceManager.java中
public final class SystemServiceManager implements Dumpable {
private List<SystemService> mServices;
SystemServiceManager(Context context) {
mServices = new ArrayList<>();
}
public <T extends SystemService> T startService(Class<T> serviceClass) { // 泛型方法,它定义了一个类型参数T,这个类型参数必须是SystemService或其子类
final String name = serviceClass.getName();
// 使用serviceClass.getConstructor(Context.class)获取一个接受Context作为参数的构造函数。这要求服务类必须有一个公开的构造函数,该构造函数接受一个Context类型的参数
Constructor<T> constructor = serviceClass.getConstructor(Context.class);
service = constructor.newInstance(mContext); // 通过constructor.newInstance(mContext)创建服务实例
startService(service);
return service;
}
public void startService(@NonNull final SystemService service) {
String className = service.getClass().getName(); // 获取服务的类名
mServices.add(service);
try {
service.onStart(); // 调用服务的onStart()方法来启动服务
} catch (RuntimeException ex) {
throw new RuntimeException("Failed to start service " + service.getClass().getName()
+ ": onStart threw an exception", ex);
}
}
}
代码走到SystemService.java中的onStart抽象函数中,public abstract void onStart();会进一步走到ActivityTaskManagerService中定义的继承自SystemService的内部类Lifecycle中
3,在frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java中
public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
final ActivityTaskManagerInternal mInternal; //在ActivityTaskManagerService的构造函数中,mInternal = new LocalService();
public static final class Lifecycle extends SystemService { //定义内部类Lifecycle继承自SystemService
private final ActivityTaskManagerService mService;
public Lifecycle(Context context) {
super(context);
mService = new ActivityTaskManagerService(context);
}
@Override
public void onStart() {
publishBinderService(Context.ACTIVITY_TASK_SERVICE, mService); // 将ATMS保存到ServiceManager
mService.start();
}
@Override
public void onUserUnlocked(@NonNull TargetUser user) {
synchronized (mService.getGlobalLock()) {
mService.mTaskSupervisor.onUserUnlocked(user.getUserIdentifier());
}
}
@Override
public void onUserStopped(@NonNull TargetUser user) {
synchronized (mService.getGlobalLock()) {
mService.mTaskSupervisor.mLaunchParamsPersister
.onCleanupUser(user.getUserIdentifier());
}
}
public ActivityTaskManagerService getService() {
return mService;
}
}
private void start() {
LocalServices.addService(ActivityTaskManagerInternal.class, mInternal);
}
}
4,在frameworks/base/services/core/java/com/android/server/SystemService.java中
public abstract class SystemService {
public abstract void onStart();
protected final void publishBinderService(String name, IBinder service,boolean allowIsolated, int dumpPriority) {
ServiceManager.addService(name, service, allowIsolated, dumpPriority);
}
}
5,在frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java中
public class ActivityManagerService extends IActivityManager.Stub implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback, ActivityManagerGlobalLock {
public final ActivityManagerInternal mInternal;//在ActivityManagerService的构造函数中,mInternal = new LocalService();
public static final class Lifecycle extends SystemService {
private final ActivityManagerService mService;
private static ActivityTaskManagerService sAtm;
public Lifecycle(Context context) {
super(context);
mService = new ActivityManagerService(context, sAtm);
}
public static ActivityManagerService startService(
SystemServiceManager ssm, ActivityTaskManagerService atm) {
sAtm = atm;
return ssm.startService(ActivityManagerService.Lifecycle.class).getService(); //同ATMS一样调用SystemServiceManager的startService函数和getService函数。
}
@Override
public void onStart() {
mService.start();
}
@Override
public void onBootPhase(int phase) {
mService.mBootPhase = phase;
if (phase == PHASE_SYSTEM_SERVICES_READY) {
mService.mBatteryStatsService.systemServicesReady();
mService.mServices.systemServicesReady();
} else if (phase == PHASE_ACTIVITY_MANAGER_READY) {
mService.startBroadcastObservers();
} else if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) {
mService.mPackageWatchdog.onPackagesReady();
}
}
@Override
public void onUserStopped(@NonNull TargetUser user) {
mService.mBatteryStatsService.onCleanupUser(user.getUserIdentifier());
}
public ActivityManagerService getService() {
return mService;
}
}
private void start() {
LocalServices.addService(ActivityManagerInternal.class, mInternal);
}
public void setSystemProcess() {
ServiceManager.addService(Context.ACTIVITY_SERVICE, this, /* allowIsolated= */ true,DUMP_FLAG_PRIORITY_CRITICAL | DUMP_FLAG_PRIORITY_NORMAL | DUMP_FLAG_PROTO);
}
}
经过上面的步骤,ATMS和AMS就可以启动并加入到ServiceManager中。