详细分析Android中实现Zygote的源码

2020-01-06 13:36:52丽君

接下来,是预加载OpenGL。源码如下:

 

 
  1. private static void preloadOpenGL()  { 
  2. if (!SystemProperties.getBoolean(PROPERTY_DISABLE_OPENGL_PRELOADING, false)) {  EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY); 
  3. }  } 

启动system_server

现在我们要分析第三个关键点:startSystemServer。这个函数会创建java世界中系统Service所驻留的进程system_server,该进程是framework的核心。如何system_server挂掉,会导致zygote自杀。我们来看一下startSystemServer()实现源码。

  1. /**  * Prepare the arguments and fork for the system server process. 
  2. */  private static boolean startSystemServer() throws MethodAndArgsCaller, RuntimeException 
  3. {  long capabilities = posixCapabilitiesAsBits( 
  4. OsConstants.CAP_KILL,  OsConstants.CAP_NET_ADMIN, 
  5. OsConstants.CAP_NET_BIND_SERVICE,  OsConstants.CAP_NET_BROADCAST, 
  6. OsConstants.CAP_NET_RAW,  OsConstants.CAP_SYS_MODULE, 
  7. OsConstants.CAP_SYS_NICE,  OsConstants.CAP_SYS_RESOURCE, 
  8. OsConstants.CAP_SYS_TIME,  OsConstants.CAP_SYS_TTY_CONFIG 
  9. );   
  10. // 设置参数  String args[] = { 
  11. "--setuid=1000",  "--setgid=1000", 
  12. "--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1032,3001,3002,3003,3006,3007",  "--capabilities=" + capabilities + "," + capabilities,