step1. init进程根据init.rc中的zygote配置fork一个进程加载/system/bin/app_process.(入口在framework/base/cmds/app_process/app_main.cpp中)
step2. app_main.cpp/main
通过AppRuntime调用其父类AndroidRuntime==>runtime.start("com.android.internal.os.ZygoteInit",startSystemServer)函数处理。
step3. AndroidRuntime.cpp/start
AndroidRuntime::start(x,x)函数call startVm(&mJavaVM, &env)启动虚拟机, call startReg(env)注册jni方法,call env->CallStaticVoidMethod(startClass, startMeth, strArray)进入com.android.internal.os.ZygoteInit类的main方法。
step4. ZygoteInit.java/main
ZygoteInit.main call registerZygoteSocket()创建一个socket接口用来和ActivityManagerService通信,call preloadClasses()来预先加载java类,call preloadResources()来加载资源,call startSystemServer()来启动SystemServer进程,最后call runSelectLoopMode()进入一个无限循环在前面创建的socket接口上等待ActivityManagerService的请求,创建新的应用程序进程。