一、作用 :
用于建立DVM或ART、應用程式程序,運作系統關鍵服務的SystemServer程序
二、建立程序方式
采用fork(複制程序)方式建立程序,被建立的程序都是複制Zygote的main()函數 所執行的所有代碼,是以被建立的程序 都會有DVM和ART的副本。
三、Zygote根據系統32/64位,自身也區分32、64位
(1)Zygote啟動多少位是由腳本決定的,啟動Zygote的腳本是init.rc 檔案中由import類型語句引入
(2)init.rc 的service 類型語句被解析成對象時,放入init程序的Service隊列中時,就已經将Zygote真正的多少位封裝到Service内部中了。
四、Zygote啟動過程
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPB90dRRUT0cGVPhHOxoVd5ckYwhnMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLxETO5ETMxAjM2ETMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
如圖所示:啟動過程
Zygote啟動後做了那些事以及作用
(1)init程序 建立子程序 通過輪訓server隊列 找到Zygote的執行路徑,已經對應main函數,然後通過AndroidrunTime 的start方法 在子程序啟動Zygote。
(2)在AndroidRuntime 中建立java虛拟機,并且為此java虛拟機注冊JNI方法,
(3)在AndroidRuntime中通過JNI調用ZygoteInit的main方法,因為ZygoteInit是由java實作,在此處也就是表明了 在Zygote程序中是系統中第一次實作與java層調用對接。
(4)在Zygoteinit中會建立一個Socket的服務,這個Socket用于Zygote接受AMS發送建立程序的請求,是以Zygote建立新的程序是通過Socket接受消息實作的。
(5)在Zygoteinit中會建立通過注冊的Socket的,并調用socket的輪訓方法,等待AMS的請求建立新的程序
(6)在Zygoteinit中會做加載類和資源的的動作,不太清楚用處。
(7)在Zygoteinit中會将 Systemserver 程序啟動