SystemServer是什么?

首先要了解的是SystemServer本质上是一个进程,而且是由zygote进程fork出来的。

知道了SystemServer的本质,我们对它就不算太陌生了,这个进程是Android里两大重要进程之一——另外一个进程就是zygote。

为什么说SystemServer非常重要呢?因为系统里面重要的服务都是在这个进程里面开启的,比如 ActivityManagerService、PackageManagerService、WindowManagerService等等。

那么这些系统服务是怎么开启起来的呢?

在zygote开启的时候,会调用ZygoteInit.main()进行初始化

public static void main(String argv[]) {

   ...ignore some code...

  //在加载首个zygote的时候,会传入初始化参数,使得startSystemServer = true
   boolean startSystemServer = false;
   for (int i = 1; i < argv.length; i++) {
                if ("start-system-server".equals(argv[i])) {
                    startSystemServer = true;
                } else if (argv[i].startsWith(ABI_LIST_ARG)) {
                    abiList = argv[i].substring(ABI_LIST_ARG.length());
                } else if (argv[i].startsWith(SOCKET_NAME_ARG)) {
                    socketName = argv[i].substring(SOCKET_NAME_ARG.length());
                } else {
                    throw new RuntimeException("Unknown command line argument: " + argv[i]);
                }
            }

            ...ignore some code...

    //开始fork我们的SystemServer进程
  if (startSystemServer) {
        startSystemServer(abiList, socketName);
    }

   ...ignore some code...

}

我们看下startSystemServer()做了些什么

Last updated

Was this helpful?