Android zygote启动流程

来源:互联网 发布:2016年中国出口数据 编辑:程序博客网 时间:2024/05/22 06:18

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.maincall registerZygoteSocket()创建一个socket接口用来和ActivityManagerService通信,call preloadClasses()来预先加载java类,call preloadResources()来加载资源,call startSystemServer()来启动SystemServer进程,最后call runSelectLoopMode()进入一个无限循环在前面创建的socket接口上等待ActivityManagerService的请求,创建新的应用程序进程。


原创粉丝点击