美文网首页
Android - 启动相关(2)- SystemServer是

Android - 启动相关(2)- SystemServer是

作者: 杨0612 | 来源:发表于2020-07-08 15:58 被阅读0次

之前只知道它跟用户进程启动有关,一起看下它是何方神圣吧,主要围绕作用以及如何启动的。

源码分析基于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)

以上分析有不对的地方,请指出,互相学习,谢谢哦!

相关文章

网友评论

      本文标题:Android - 启动相关(2)- SystemServer是

      本文链接:https://www.haomeiwen.com/subject/soyqcktx.html