1.Service的大管家SystemServer
ServiceManager服务启动后,通过BINDER_SET_CONTEXT_MGR命令将自己设置为ContextManager,这样后面启动的服务就可以通过ServiceManager来管理,每当Client需要使用Server的功能时,首先通过ServiceManager获取这个Server服务,然后再调用Server的相关功能。
系统启动时,SystemServer.java中的run()方法会启动系统的一些服务,会依次调用下面三个方法**:**
cpp
private void run() {
// Start services.
t.traceBegin("StartServices");
startBootstrapServices(t);
startOtherServices(t);
//......
}
2.ActivityManagerService 创建和启动,注册到SM中
java
private void startBootstrapServices(@NonNull TimingsTraceAndSlog t) {
...
// Activity manager runs the show.
ActivityTaskManagerService atm = mSystemServiceManager.startService(
ActivityTaskManagerService.Lifecycle.class).getService();
mActivityManagerService = ActivityManagerService.Lifecycle.startService(
mSystemServiceManager, atm);
mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
...
mActivityManagerService.setSystemProcess();
}
java
public class ActivityManagerService extends IActivityManager.Stub{
......
public void setSystemProcess() {
......
ServiceManager.addService(Context.ACTIVITY_SERVICE, this, /* allowIsolated= */ true, DUMP_FLAG_PRIORITY_CRITICAL | DUMP_FLAG_PRIORITY_NORMAL | DUMP_FLAG_PROTO);
......
}
}