4.1深入理解Android卷I---深入理解zygote---Zygote进程的学习

深入理解Zygotehttps://blog.csdn.net/Innost/article/details/47207845

一、 Zygote分析
Zygote本身是一个Native的应用程序,和驱动、内核等均无关系。根据第3章对于init的介绍我们可以知道,Zygote(Zygote进程由init通过fork而来)是由init进程根据init.rc文件中的配置项而创建的。在分析它之前,我们有必要先简单介绍一下“zygote”这个名字的来历。zygote最初的名字叫“app_process”,这个名字是在Android.mk文件中被指定的,但app_process在运行过程中,通过Linux下的pctrl系统调用将自己的名字换成了“zygote”,所以我们通过ps命令看到的进程名是“zygote”。
zygote玩的这一套“换名把戏”并不影响我们的分析,它的原型app_process所对应的源文件是App_main.cpp。

   int main(int argc, const char* const argv[]) { ...
    if (i< argc) {    
       arg = argv[i++];    
        if(0 == strcmp("--zygote", arg)) {    
          //我们传入的参数满足if的条件,而且下面的startSystemServer的值为true    
           bool startSystemServer = (i < argc) ?   
                    strcmp(argv[i],"--start-system-server") == 0 : false;    
           setArgv0(argv0, "zygote");    
          //设置本进程名为zygote,这正是前文所讲的“换名把戏”。    
           set_process_name("zygote");
          //①调用runtime的start,注意第二个参数startSystemServer为true
           runtime.start("com.android.internal.os.ZygoteInit", startSystemServer);    
        } ...}

Zygote的这个main函数虽很简单,但其重要功能却是由AppRuntime的start来完成的.
1. AppRuntime分析
AppRuntime类的声明和实现均在App_main.cpp中,它是从AndroidRuntime类派生出来的,AppRuntime重载了onStarted、onZygoteInit和onExit函数。
[–>AndroidRuntime.cpp]中主要做:① 创建虚拟机②注册JNI函数
③通过JNI调用Java函数,注意调用的函数是main,所属的类是 com.android.internal.os.ZygoteInit,传递的参数是“com.android.internal.os.ZygoteInit true”,调用ZygoteIni

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值