Zygote是一個虛擬機進程,同時也是一個虛擬機實例的孵化器,
每當系統要求執行一個Android應用程序,Zygote就會FORK出一個子進程來執行該應用程序。
這樣做的好處顯而易見:Zygote進程是在系統啓動時產生的,
它會完成虛擬機的初始化,庫的加載,
預置類庫的加載和初始化等等操作,
而在系統需要一個新的虛擬機實例時,Zygote通過複製自身
1.最快速的提供個系統。
2.對於一些只讀的系統庫,所有虛擬機實例都和Zygote共享一塊內存區域,大大節省了內存開銷。
Zygote系統代碼組成及其調用結構:
- Zygote.java
提供訪問Dalvik “zygote”的接口。主要是包裝Linux系統的Fork,以建立一個新的VM實例進程。
- ZygoteConnection.java
Zygote的套接口連接管理及其參數解析。其他Actvitiy建立進程請求是通過套接口發送命令參數給Zygote。
- ZygoteInit.java
Zygote的main函數入口。
//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 },
};