美文网首页
Zygote Fork机制与资源预加载

Zygote Fork机制与资源预加载

作者: Charles1993 | 来源:发表于2019-12-08 22:23 被阅读0次

在我们学习AMS,PMS等的时候都有提到过zygote,那么zygote是什么呢?

zygote中文意思是受精卵,
通过这个名字我们大概可以知道,安卓团队大概是通过他孵化什么东西。

祭上图来解释:


zygote孵化图

由图我们可以看出,他的父进程是init进程,他孵化了SystemServer进程,以及我们的应用进程。
下面我们重点看一看zygote是怎么工作的:

Zygote进程创建

从上图可以看出zygote是由init进程fork出来的。
我们知道Android是基于Linux实现的。而init进程是Linux启动后的第一个用户进程。下图为我们展示了
android启动的过程

Android系统启动图

上图中Step1~Step4都发生在Linux中,与Android没多大关系,Step5开始才正式开始构建Android
世界。我们接下来以Android 8系统源码为例看看Step4是过渡到Step5的。

linunx的init进程会执行到\android-8.0.0_r1\system\core\init\init.cpp中,init.cpp
会读取init.rc文件\android-8.0.0_r1\system\core\rootdir\init.rc文件,然后依据配
置创建新线程并执行相应的代码(surfaceflinger中会有讲到),其中有一条配置指向
\android-8.0.0_r1\frameworks\base\cmds\app_process\app_main.cpp,这个就是我们zygote的开始

Zygote孵化SystemServer和其他进程

祭上一张zygote时序图

zygote进程时序图
  • 上图中app_main和AndroidRuntime是native层的,其余的是Java层的。
  • 在nativeZygoteInit中完成Binder服务初始化。这时候Binder才可以使用。(SystemServer进程)
    在fork出新线程后做的第一件事就是关闭socket,如果采用Binder直接拿着地址是不是会有安全问题
  • runSelectLoop进入死循环等待fork新进程的请求。
  • preload预加载了一些可能会用到的类和资源比如说
系统提供的资源

AMS请求Zygote fork一个新进程

当AMS判断需要一个新进程是会执行到startProcessLocked()与Zygote通信。
Zygote收到后会调用Zygote.forkAndSpecialize(),fork一个新进程,并且分叉

zygote fork 新进程

分叉后的进程会将socket停掉并重新初始化一些数据但是,preload的资源和类保和VM留了下来,
自此新的进程和zygote进程分道扬镳。

相关文章

  • Zygote Fork机制与资源预加载

    在我们学习AMS,PMS等的时候都有提到过zygote,那么zygote是什么呢? zygote中文意思是受精卵,...

  • 前端性能优化

    (1)懒加载与预加载 懒加载的场景 图片进入可视区域之后进行资源请求 减少无效资源的加载 并发加载的资源过多会阻塞...

  • Handler,Looper,Message

    从《App的启动过程》一篇知道,zygote会fork新进程,然后加载ActivityThread类,并调用其ma...

  • ART GC

    Java堆 Image Space: 存放一些预加载的类 Zygote Space: 对应Davlik的Zygot...

  • Anroid 系统服务进程与应用程序进程启动过程对比

    同样是 fork 自 zygote 进程,系统服务进程与应用进程有什么区别呢?先说回 zygote 进程做的事情,...

  • cocos creator基础-(十三)cc.Loader使用

    1: 掌握cc.loader加载本地资源; 2: 掌握cc.loader加载远程资源; 3: 掌握资源释放的机制与...

  • 资源预加载

    参考:http://www.alloyteam.com/2015/10/prefetching-preloadin...

  • 资源预加载

    一、DNS prefetch DNS prefetching通过指定具体的URL来告知客户端未来会用到相关的资源,...

  • App数据分析小心预加载机制

    App数据分析小心预加载机制 很多App都有预加载机制。利用手机网络不繁忙的时候,会预先加载需要的数据。例如,微b...

  • 预加载与智能预加载 (VIA)

    预加载与智能预加载(iOS) 网络与性能 预加载无限滚动列表Threshold惰性加载智能预加载 总结 前两次的分...

网友评论

      本文标题:Zygote Fork机制与资源预加载

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