Android系統(tǒng)啟動流程(二)解析Zygote進程啟動過程
1.Zygote簡介
在Android系統(tǒng)中,DVM(Dalvik虛擬機)、應(yīng)用程序進程以及運行系統(tǒng)的關(guān)鍵服務(wù)的SystemServer進程都是由Zygote進程來創(chuàng)建的,我們也將它稱為孵化器。它通過fock(復(fù)制進程)的形式來創(chuàng)建應(yīng)用程序進程和SystemServer進程,由于Zygote進程在啟動時會創(chuàng)建DVM,因此通過fock而創(chuàng)建的應(yīng)用程序進程和SystemServer進程可以在內(nèi)部獲取一個DVM的實例拷貝。
關(guān)于init啟動zygote我們在上一篇文章已經(jīng)提到了,這里就不贅述了,這篇文章主要分析Android7.0 Zygote的啟動流程。
2.AppRuntime分析
3.Zygote的Java框架層
上文我們通過JNI調(diào)用ZygoteInit的main函數(shù)后,Zygote便進入了Java框架層,此前沒有任何代碼進入過Java框架層,換句換說Zygote開創(chuàng)了Java框架層。
4.Zygote進程總結(jié)
Zygote啟動流程就講到這,Zygote進程共做了如下幾件事:
1.創(chuàng)建AppRuntime并調(diào)用其start方法,啟動Zygote進程。
2.創(chuàng)建DVM并為DVM注冊JNI.
3.通過JNI調(diào)用ZygoteInit的main函數(shù)進入Zygote的Java框架層。
4.通過registerZygoteSocket函數(shù)創(chuàng)建服務(wù)端Socket,并通過runSelectLoop函數(shù)等待ActivityManagerService的請求來創(chuàng)建新的應(yīng)用程序進程。
5.啟動SystemServer進程。
浙公網(wǎng)安備 33010602011771號