Framework面试一:谈谈你对Zygote的理解

目录

参考文章:

这道题想考察什么?

Zygote简介:

了解Zygote的作用(初级)

熟悉Zygote的启动流程(中级)

1、Zygote进程怎么启动?

2、Zygote启动之后做了什么?

深刻理解Zygote的工作原理(高级)

总结:

What:Zygote是什么,它的作用是什么

How:Zygote的启动流程是什么?

Why:Zygote的工作原理是什么


参考文章:

Android系统架构与系统源码目录

Android系统启动流程(一)解析init进程启动过程

Android系统启动流程(二)解析Zygote进程启动过程

以上三篇文章涉及到C语言源码,比较难懂。

这道题想考察什么?

  • 了解Zygote的作用(初级)
  • 熟悉Zygote的启动流程(中级)
  • 深刻理解Zygote的工作原理(高级)

Zygote简介:

Zygote 美 [ˈzaɪɡoʊt]   受精卵 ,孵化器

在Android系统中,DVM(Dalvik虚拟机)、应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,我们也将它称为孵化器。它通过fork(复制进程)的形式来创建应用程序进程和SystemServer进程,由于Zygote进程在启动时会创建DVM,因此通过fork而创建的应用程序进程和SystemServer进程可以在内部获取一个DVM的实例拷贝。

了解Zygote的作用(初级)

1、启动SystemServer:SystemServer的启动需要Zygote准备的一些资源,比如:一些常用类、JNI函数、主题资源、共享库2、孵化应用进程

熟悉Zygote的启动流程(中级)

先来了解一下进程启动的三段式:启动、准备工作、Loop

关于Zygote的启动流程,我们需要了解一下两点:

1、Zygote进程怎么启动?

init简介:init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等。

Zygote进程是由init进程启动的。

2、Zygote启动之后做了什么?

Zygote的Native部分

  • 1、启动Android虚拟机
  • 2、注册Android的JNI函数
  • 3、进入Java部分

Zygote的Java部分

  • 1、Preload Resources 预加载资源
  • 2、启动SystemServer(用fork的方法启动,单独跑在一个线程中)
  • 3、进入Loop循环(等待的是socket信息)

要注意的的细节:

  • Zygote fork要单线程
  • Zygote的IPC没有采用binder,采用的本地的socket通信

两个问题

1、孵化应用进程这种事为什么不交给SystemServer来做,而专门设计一个Zygote?
2、Zygote的IPC通信机制为什么不采用binder?如果采用binder的话会有什么问题?

深刻理解Zygote的工作原理(高级)

总结:

谈谈你对Zygote的理解?

再回到这个问题,我们可以从三个方面来回答:What、How、Why

What:Zygote是什么,它的作用是什么

Zygote是一个孵化器,作用是:启动SystemServer和孵化应用进程

How:Zygote的启动流程是什么?

Why:Zygote的工作原理是什么

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值