Android核心分析 之九-------Zygote Service

在本章我们会接触到这两个单词:

  • Zygote [ 生物 受精卵 接合子 接合体
  • Spawn :产卵

通过这两个单词,我们就可以大体知道 Zygote 是干什么的了,就是叫老母鸡下蛋。通过“ Zygote ”产出不同的子“ Zygote ”。从大的架构上讲, Zygote 是一个简单的典型 C/S 结构。其他进程作为一个客服端向 Zygote 发出 ”孵化”请求, Zygote 接收到命令就“孵化”出一个 Activity 进程来。

 

Zygote 系统代码组成及其调用结构:

  • Zygote.java

提供访问 Dalvik  “zygote”的接口。主要是包装 Linux 系统的 Fork ,以建立一个新的 VM 实例进程。

  • ZygoteConnection.java

Zygote 的套接口连接管理及其参数解析。其他 Actvitiy 建立进程请求是通过套接口发送命令参数给 Zygote

  • ZygoteInit.java

Zygote main 函数入口。

 

Zygote 系统代码层次调用

 


main()

Startsystemserver()…

RunSelectLoopMode()

Accept socket connection

Conntecion.RunOnce()

Read argument

folkAndSpecialize


 

folkAndSpecialize 使用 Native 函数 Dalvik_dalvik_system_Zygote_forkAndSpecialize

 

 

//native  的获取

 dalvik/vm/native

 

//dalvik_system_Zygote.c

  const DalvikNativeMethod dvm_dalvik_system_Zygote[] = {

    { "fork",            "()I",

        Dalvik_dalvik_system_Zygote_fork },

    { "forkAndSpecialize",            "(II[II[[I)I",

        Dalvik_dalvik_system_Zygote_forkAndSpecialize },

    { "forkSystemServer",            "(II[II[[I)I",

        Dalvik_dalvik_system_Zygote_forkSystemServer },

    { NULL, NULL, NULL },

};

 

在这里我们就有了 Zygote 服务的全貌理解,也在 Code 中印证了, Activity 在本质上是个什么东西,就是一个 Linux 进程。但是不是一个简单的 Linux 进程,毕竟 Activity 是在 Andoid 概念空间中才有效的。在这个概念空间中, Activity 被包装,在屏幕上呈现 UI ,用户看到的整个屏幕或者一个窗口,对于机器来讲,呈现在用户面前的就叫 Actvitiy 。从分析中我们可以看到, Android 使用了 Linux fork 机制。在 Linux Fork 是很高效的。


一个 Android Activity 实际上一个 Linux 进程,所谓进程具备下面几个要素,

a.要有一段程序供该进程运行,程序是可以被多个进程共享的。

b.. 进程专用的系统堆栈空间。

c. 进程控制块,在 linux 中具体实现是 task_struct

d. 有独立的存储空间。

 

fork  创造的子进程复制了父亲进程的资源,包括内存的内容 task_struct 内容,在复制过程中,子进程复制了父进程的 task_struct ,系统堆栈空间和页面表,而当子进程改变了父进程的变量时候,会通过 copy_on_write 的手段为所涉及的页面建立一个新的副本。所以只有子进程有改变变量时,子进程才新建了一个页面复制原来页面的内容,基本资源的复制是必须的,整体看上去就像是父进程的独立存储空间也复制了一遍。

 

再看看下面 Google 在讲解 Dalvik 虚拟机的图片,我们就大体有了 Android 系统中 Actvitiy 的实际映射状态 有了基本的认识。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值