Zygote Service

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的实际映射状态有了基本的认识。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/maxleng/archive/2010/04/20/5508488.aspx

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值