zygote的启动和作用

作者: space0o0 | 来源:发表于2019-12-26 12:58 被阅读0次
  • zygote的作用(what)
  • zygote的启动流程(how)
  • zygote的工作原理(why)

zygote的作用

1、启动SystemServer
2、孵化引用进程

zygote启动流程和工作原理

启动进程

1、linux启动后的第一个进程:Init进程;
2、Init进程读取Init.rc文件开启zygote进程;

准备工作

3、调用startVm函数创建虚拟机,调用startReg函数为虚拟机注册JNI方法;
4、在虚拟机的环境中找到zygoteInit的类,找到类中的Main函数,使用CallStaticVoidMethod函数开启Main函数,从这里就进入了java世界,上面的都是native世界;
5、zygote进程开始预加载系统资源,这样通过它fork的子进程就相当于不用再创建一遍资源,达到了加速启动应用进程的作用。
6、启动SystemServer进程,用来启动系统服务

Loop

7、最后开启Loop,通过socket来进行通讯

8967140E-682C-4263-9888-A8A72197DDEB.png
  • 孵化应用进程这种事为什么不交给SystemServer来做,而专门设计一个Zygote?
    我们知道,应用在启动的时候需要做很多准备工作,包括启动虚拟机,加载各类系统资源等等,这些都是非常耗时的,如果能在zygote里就给这些必要的初始化工作做好,子进程在fork的时候就能直接共享,那么这样的话效率就会非常高。这个就是zygote存在的价值,这一点呢SystemServer是替代不了的,主要是因为SystemServer里跑了一堆系统服务,这些是不能继承到应用进程的。而且我们应用进程在启动的时候,内存空间除了必要的资源外,最好是干干净净的,不要继承一堆乱七八糟的东西。所以呢,不如给SystemServer和应用进程里都要用到的资源抽出来单独放在一个进程里,也就是这的zygote进程,然后zygote进程再分别孵化出SystemServer进程和应用进程。孵化出来之后,SystemServer进程和应用进程就可以各干各的事了。

  • Zygote的IPC通信机制为什么不采用binder?如果采用binder的话会有什么问题么?
    第一个原因,我们可以设想一下采用binder调用的话该怎么做,首先zygote要启用binder机制,需要打开binder驱动,获得一个描述符,再通过mmap进行内存映射,还要注册binder线程,这还不够,还要创建一个binder对象注册到serviceManager,另外AMS要向zygote发起创建应用进程请求的话,要先从serviceManager查询zygote的binder对象,然后再发起binder调用,这来来回回好几趟非常繁琐,相比之下,zygote和SystemServer进程本来就是父子关系,对于简单的消息通信,用管道或者socket非常方便省事。第二个原因,如果zygote启用binder机制,再fork出SystemServer,那么SystemServer就会继承了zygote的描述符以及映射的内存,这两个进程在binder驱动层就会共用一套数据结构,这显然是不行的,所以还得先给原来的旧的描述符关掉,再重新启用一遍binder机制,这个就是自找麻烦了。

16c701be782bc915.png

参考资料:
谈谈对Android中Zygote的理解 - 掘金

相关文章

  • zygote的启动和作用

    zygote的作用(what) zygote的启动流程(how) zygote的工作原理(why) zygote的...

  • zygote的理解

    谈一谈对Zygote的理解? Zygote的作用是什么? 启动三段式 Zygote的启动流程 Zygote进程是怎...

  • [视频笔记] -剖析framework面试,冲击Android高

    1.1 谈谈对zygote的理解? zygote的作用是什么? 启动SystemServer:需要zygote里准...

  • 谈谈对Zygote的理解

    了解Zygote的作用 启动SystemServer 孵化应用进程 熟悉Zygote的启动流程 启动三段式 进程启...

  • 剖析Frameworks笔记

    谈谈对Zygote的理解 Zygote的作用是什么?启动SystemServer(从Zygote直接获取常用类、J...

  • Zygote进程

    1. Zygote的两个作用: 启动SystemServer 孵化应用进程 2. Zygote的启动三步骤 (1)...

  • Zygote工作流程

    Zygote的作用 1)启动SystemServer(使用zygote的资源:常用类,JNI函数,主题资源,共享库...

  • 对Zygote启动流程的理解

    Zygote的作用是什么? Zygote主要作用有两点:1.启动SystemServer。2.孵化应用进程。应用启...

  • 【FrameWork】①系统服务及应用进程相关

    系统服务 1. Zygote作用、启动流程、工作原理 1.1 作用:启动SystemServer孵化应用进程 1....

  • Zygote

    一、App启动流程 二、zygote的作用 a. 启动systemServer (常用类、JNI函数、主题资源、...

网友评论

    本文标题:zygote的启动和作用

    本文链接:https://www.haomeiwen.com/subject/pmbkoctx.html