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世界启动新进程的通道,将在以后介绍。