认识理解zygote



zygote启动时由init解析init.rc创建。
zygote创建dalvikVM,注册native method,预加载类及库。
之后zygote负责创建systemserver进程及其他安卓进程。


查看 app_process(即zygote)入口代码


init解析init.rc
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
启动 /system/bin/app_process,
app_process用法:
Usage: app_process [java-options] cmd-dir start-class-name [options]
创建AppRuntime实例,
根据参数,设置进程名为zygote,
runtime.start("com.android.internal.os.ZygoteInit", args);   //args: <"start-system-server",>
JniInvocation::Init()         //load library
  
  
open libart.so
startVM() //init vm
parse options...
jint JniInvocation::JNI_CreateJavaVM()
startReg(JNIEnv* env)   //register android native methods, located in frameworks/base/core/jni/
 
 
call com.android.internal.os.ZygoteInit.main()
  
  
registerZygoteSocket      //for start apps command from systemserver
preload        //preload classes and libs
startSystemServer    //start system service process
   
   
Zygote.forkSystemServer
  
  
runSelectLoop
   
   
selectReadableSocket
ZygoteConnection.runOnce       //read command, fork new process
    
    
Zygote.forkAndSpecialize

 
zygote启动时由init解析init.rc创建。
zygote创建dalvikVM,注册native method,预加载类及库。
之后zygote负责创建systemserver进程及其他安卓进程。


查看 app_process(即zygote)入口代码


init解析init.rc
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
启动 /system/bin/app_process,
app_process用法:
Usage: app_process [java-options] cmd-dir start-class-name [options]
创建AppRuntime实例,
根据参数,设置进程名为zygote,
runtime.start("com.android.internal.os.ZygoteInit", args);   //args: <"start-system-server",>
JniInvocation::Init()         //load library
   
   
open libart.so
startVM() //init vm
parse options...
jint JniInvocation::JNI_CreateJavaVM()
startReg(JNIEnv* env)   //register android native methods, located in frameworks/base/core/jni/
  
  
call com.android.internal.os.ZygoteInit.main()
   
   
registerZygoteSocket      //for start apps command from systemserver
preload        //preload classes and libs
startSystemServer    //start system service process
    
    
Zygote.forkSystemServer
   
   
runSelectLoop
    
    
selectReadableSocket
ZygoteConnection.runOnce       //read command, fork new process
     
     
Zygote.forkAndSpecialize

 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值