Android zygote启动流程

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的请求,创建新的应用程序进程。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值