天天看點

android--系統啟動--Zygote程序啟動過程

一、作用 :

用于建立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啟動過程

android--系統啟動--Zygote程式啟動過程
如圖所示:啟動過程

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 程序啟動

繼續閱讀