4.3 ZygoteInit开启Java世界的五部分工作

上一节分析了ZygoteInit的五部分工作,从本节开始详细分析每一部分的工作。首先分析第一部分:注册zygote的Socket。

4.3.1 注册zygote的Socket

这部分功能是通过registerZygoteSocket方法完成的,该方法绑定了zygote中的Socket,用于接受ActivityManagerService启动应用程序的请求。

registerZygoteSocket方法位于ZygoteInit.java中,代码如下:


private static void registerZygoteSocket(){

if(sServerSocket==null){

int fileDesc;

try{

String env=System.getenv(ANDROID_SOCKET_ENV);

fileDesc=Integer.parseInt(env);

}catch(RuntimeException ex){

……

}

/创建Socket,用于和ActivityManagerService通信/

try{

sServerSocket=new LocalServerSocket(

createFileDescriptor(fileDesc));

}catch(IOException ex){

……

}

}

}


这个Socket的fd由zygote启动时传入,最终该Socket将与ActivityManagerService通信,是Java世界启动新进程的通道,将在以后介绍。