之前只知道它跟用户进程启动有关,一起看下它是何方神圣吧,主要围绕作用以及如何启动的。
源码分析基于Android 23分析
SystemServer作用
是一个独立的进程,主要负责系统服务(例ams、wms、pms)的维护;
SystemServer启动流程
ZygoteInit.startSystemServer是主要入口
//ZygoteInit类中
private static boolean startSystemServer(String abiList, String socketName)
throws MethodAndArgsCaller, RuntimeException {
······
try {
......
pid = Zygote.forkSystemServer(//1
parsedArgs.uid, parsedArgs.gid,
parsedArgs.gids,
parsedArgs.debugFlags,
null,
parsedArgs.permittedCapabilities,
parsedArgs.effectiveCapabilities);
} catch (IllegalArgumentException ex) {
throw new RuntimeException(ex);
}
......
handleSystemServerProcess(parsedArgs);//2
......
return true;
}
- 注释1:调用nativeForkSystemServer fork进程;
- 注释2:主要看下handleSystemServerProcess这个函数;
//ZygoteInit类中
private static void handleSystemServerProcess(
ZygoteConnection.Arguments parsedArgs)
throws ZygoteInit.MethodAndArgsCaller {
......
RuntimeInit.zygoteInit(parsedArgs.targetSdkVersion, parsedArgs.remainingArgs, cl);//1
......
}
//RuntimeInit类中
public static final void zygoteInit(int targetSdkVersion, String[] argv, ClassLoader classLoader)
throws ZygoteInit.MethodAndArgsCaller {
......
nativeZygoteInit();//2
applicationInit(targetSdkVersion, argv, classLoader);//3
}
- 注释1:转到RuntimeInit.zygoteInit;
- 注释2:启动binder线程;
- 注释3:主要反射调用SystemServer的入口函数main;
SystemServer//类中
public static void main(String[] args) {
new SystemServer().run();//1
}
private void run() {
······
mSystemServiceManager = new SystemServiceManager(mSystemContext);//1
......
startBootstrapServices();//2
startCoreServices();//3
startOtherServices();//4
......
}
- 注释1: 创建SystemServiceManager,它是负责服务生命周期的管理,例如启动;
- 注释2:startBootstrapServices,启动ActivityManagerService、PowerManagerService、PackageManagerService等;
- 注释3:startCoreServices,启动BatteryService,WebViewUpdateService等;
- 注释4:startOtherServices,启动AccountManagerService ,VibratorService,WindowManagerService 等;
总结
- SystemServer是由Zygote进程启动的,启动入口ZygoteInit.main方法中
- SystemServer是一个独立的进程,主要负责系统服务(例ams、wms、pms)的维护;
- 用户应用跟AMS通讯,主要是通过SystemServer;
以上分析有不对的地方,请指出,互相学习,谢谢哦!
SystemServer & SystemServerManger & ServerManger的关系
//SystemServer更多的是维护服务
//SystemServerManger负责启动服务
mSystemServiceManager.startService(PowerManagerService.class)
//ServerManger负责服务Ibinder的注册,也就是提供路由查询
ServiceManager.addService(Context.WINDOW_SERVICE, wm)
以上分析有不对的地方,请指出,互相学习,谢谢哦!
网友评论