当前位置: 代码迷 >> Android >> Android核心分析 之9-Zygote Service
  详细解决方案

Android核心分析 之9-Zygote Service

热度:29   发布时间:2016-05-01 14:08:09.0
Android核心分析 之九-------Zygote Service

原文地址:http://blog.csdn.net/maxleng/article/details/5508488

?

?

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

Zygotemain函数入口。

?

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中印证了。【应yk_hu0621修正】{由于Android中没有具体应用程序的入口,都是通过启动Actvity来启动相关的Android应用,而这个?Android应用则对应着Linux进程,Activity便Host在这个应用程序上。}

?

{原文:Activity在本质上是个什么东西,就是一个Linux进程}

?

从分析中我们可以看到,Android使用了Linuxfork机制。在LinuxFork是很高效的。

?

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


?

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

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

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

d.有独立的存储空间。

?

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

?

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

?

?

  相关解决方案