# 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中印證了。【應[yk_hu0621](http://hi.csdn.net/yk_hu0621)修正】{由于Android中沒有具體應用程序的入口,都是通過啟動Actvity來啟動相關的Android應用,而這個?Android應用則對應著Linux進程,Activity便Host在這個應用程序上。}
{原文:Activity在本質上是個什么東西,就是一個Linux進程}
從分析中我們可以看到,Android使用了Linux的fork機制。在Linux中Fork是很高效的。
一個Android的應用實際上一個Linux進程,所謂進程具備下面幾個要素,
a.要有一段程序供該進程運行,程序是可以被多個進程共享的。
b..進程專用的系統堆棧空間。
c.進程控制塊,在linux中具體實現是task_struct
d.有獨立的存儲空間。
fork?創造的子進程復制了父親進程的資源,包括內存的內容task_struct內容,在復制過程中,子進程復制了父進程的task_struct,系統堆棧空間和頁面表,而當子進程改變了父進程的變量時候,會通過copy_on_write的手段為所涉及的頁面建立一個新的副本。所以只有子進程有改變變量時,子進程才新建了一個頁面復制原來頁面的內容,基本資源的復制是必須的,整體看上去就像是父進程的獨立存儲空間也復制了一遍。
再看看下面Google在講解Dalvik虛擬機的圖片,我們就大體有了Android系統中Actvitiy的實際映射狀態有了基本的認識。

- 前言
- (一)分析方法論探討之設計意圖
- (二)方法論探討之概念空間篇
- (三)手機之硬件形態
- (四)手機的軟件形態
- (五)基本空間劃分
- (六)IPC框架分析 Binder,Service,Service manager
- (七)Service深入分析
- (八)Android 啟動過程詳解
- (九)Zygote Service
- (十)Android GWES之基本原理篇
- (十一)Android GWES之消息系統
- (十二)Android GEWS窗口管理之基本架構原理
- (十三)Android GWES之Android窗口管理
- (十四)Android GWES之輸入系統
- (十五)Android輸入系統之輸入路徑詳解
- (十六)Android電話系統-概述篇
- (十七)電話系統之rilD
- (十八)Android電話系統之RIL-Java
- (十九)電話系統之GSMCallTacker
- (二十)Android應用程序框架之無邊界設計意圖
- (二十一)Android應用框架之AndroidApplication
- (二十二)Android應用框架之Activity
- (二十三)Andoird GDI之基本原理及其總體框架
- (二十四)Android GDI之顯示緩沖管理
- (二十五)Android GDI之共享緩沖區機制
- (二十六)Android GDI之SurfaceFlinger
- (二十七)Android GDI 之SurfaceFlinger之動態結構示意圖
- (二十八)Android GDI之Surface&Canvas