zygote和system server启动过程解析
Zygote 的启动过程解析。 Zygote 实际上是一个用户态应用程序,由启动脚本负责启动。在启动脚本中 Zygote 叫做 app_process 。下面分析 app_main.cpp 中的启动 Zygote 的过程。 main |__ 设置 runtime 的 mParentDir 为 /usr/bin , mArgC 为 zygote 参数个数, mArgV 为 zygote 参数( -Xzygote /system/bin --zygote --start-system-server ) |__runtime.start ( AndroidRuntime::start ) |__ 设置环境变量 ANDROID_ROOT |__startVm() :启动 VM |__ 设置启动虚拟机参数,如: checkjni, 进程堆大小 16MB 等 |__ 调用 JNI_CreateJavaVM() 启动虚拟机,之后 JavaVM 和虚拟机主线程的 JNIEnv 变量有效 |__startReg() :向虚拟机主线程注册 JNI |__ com.android.internal.os.ZygoteInit.main(从JNI调用, 从此进入 JAVA 世界) |__registerZygoteSocket() :创建 Zygote 服务端本地 socket ,用于监听客户端的连接请求