Android技术知识程序员

zygote浅析

2016-12-20  本文已影响274人  NoOneDev

《深入解析Android 卷I》对zygote解释的非常有意思,他是这样说的

zygote是Android系统中创建Java世界的盘古,他创建了第一个Java虚拟机,同时他又是女娲,它成功地移植了framwork的核心System_server进程。

少主SystemServer的功法

出生

//这个方法定义在dalvik_system_Zygote.c中
pid = Zygote.forkSystemServer(parsedArgs.uid, parsedArgs.gid, parsedArgs.gid, debugFlags null );

使命

handleSystemServerProcess(parsedArgs);

这个方法主要在RuntimeInit.java实现有两方面

public static final void zygoteInit(String[] argv) throws ZygoteInit.MethodAndArgsCaller{
  zygoteInitNative(); //与Binder通信系统建立联系,加入进程队列中
  ......
  invokeStaticmain(); //抛出异常导致com.android.server.SystemServer类的main函数调用,通过这种方法可以减少浪费之前函数调用多占用的一些调用堆栈。
}

SystemServer的总结
ZygoteInit 分裂产生的SystemServer其实就是调用com.android.server.SystemServer的main函数。流程图:

SystemServer.jpg

Zygote其实就是Native进入Java世界的入口。

上一篇 下一篇

猜你喜欢

热点阅读