1、概念
Android系统的Zygote是一个C/S模型,Zygote进程作为服务端,其它进程作为客户端向它发出“孵化-fork”请求,而Zygote进程接收到这个请求后就“孵化-fork”出一个新的进程。
Zygote进程处于Java Framework层创建。
核心源码
/system/core/rootdir/init.rc
/system/core/init/main.cpp
/system/core/init/init.cpp
/system/core/rootdir/init.zygote64_32.rc
/frameworks/base/cmds/app_process/app_main.cpp
/frameworks/base/core/jni/AndroidRuntime.cpp
/libnativehelper/JniInvocation.cpp
/frameworks/base/core/java/com/android/internal/os/Zygote.java
/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
/frameworks/base/core/java/com/android/internal/os/ZygoteServer.java
/frameworks/base/core/java/com/android/internal/os/ZygoteConnection.java
/frameworks/base/core/java/com/android/internal/os/RuntimeInit.java
/frameworks/base/core/java/android/net/LocalServerSocket.java
/system/core/libutils/Threads.cpp
3、总结
Zygote进程共做了如下几件事:
-
解析init.zygote64_32.rc,创建AppRuntime并调用其start方法,启动Zygote进程。
-
创建JavaVM并为JavaVM注册JNI.
-
通过JNI调用ZygoteInit的main函数进入Zygote的Java框架层。
-
通过ZygoteServer创建服务端Socket,预加载类和资源,并通过runSelectLoop函数等待如ActivityManagerService等的请求。
-
启动SystemServer进程。