每周學(xué)一點——Android系統(tǒng)進(jìn)程 Zygote

Android系統(tǒng)進(jìn)程:Zygote

在Android系統(tǒng)中,所有的應(yīng)用程序進(jìn)程以及系統(tǒng)服務(wù)進(jìn)程SystemServer都是由Zygote進(jìn)程孕育(fork)出來的,這也許就是為什么要把它稱為Zygote(受精卵)的原因。

總所周知,Android系統(tǒng)是基于Linux內(nèi)核的,而在Linux系統(tǒng)中,所有的進(jìn)程都是init進(jìn)程的子孫進(jìn)程,也就是說,所有的進(jìn)程都是直接或者間接地由init進(jìn)程fork出來的。Zygote進(jìn)程也不例外,它是在系統(tǒng)啟動的過程,由init進(jìn)程創(chuàng)建的。

1. 系統(tǒng)啟動時init進(jìn)程會創(chuàng)建Zygote進(jìn)程,Zygote進(jìn)程負(fù)責(zé)后續(xù)Android應(yīng)用程序框架層的其它進(jìn)程的創(chuàng)建和啟動工作。

2. Zygote進(jìn)程會首先創(chuàng)建一個SystemServer進(jìn)程,SystemServer進(jìn)程負(fù)責(zé)啟動系統(tǒng)的關(guān)鍵服務(wù),如包管理服務(wù)PackageManagerService和應(yīng)用程序組件管理服務(wù)ActivityManagerService。

3. 當(dāng)我們需要啟動一個Android應(yīng)用程序時,ActivityManagerService會通過Socket進(jìn)程間通信機(jī)制,請求Zygote進(jìn)程為這個應(yīng)用程序創(chuàng)建一個新的進(jìn)程。

總結(jié):

Zygote進(jìn)程負(fù)責(zé)創(chuàng)建啟動其他進(jìn)程:SystemServer進(jìn)程和應(yīng)用程序等進(jìn)程

1、系統(tǒng)啟動時:init進(jìn)程 -》Zygote進(jìn)程 -》創(chuàng)建SystemServer進(jìn)程, SystemServer進(jìn)程-》啟動系統(tǒng)的關(guān)鍵服務(wù)(AMS,PMS)

2、當(dāng)需要一個啟動一個程序時,AMS會通過Socket進(jìn)程間通信機(jī)制,通知Zygote進(jìn)程為這個應(yīng)用程序創(chuàng)建一個新的進(jìn)程

每創(chuàng)建一個進(jìn)程,都會指定該進(jìn)程啟動時對應(yīng)的java層的入口;
比如,App進(jìn)程最終是由Zygote進(jìn)程fork出來的,并且它在Java層的入口函數(shù)為ActivityThread類的靜態(tài)成員函數(shù)main。

Android系統(tǒng)中的socket機(jī)制和binder機(jī)制一樣,都是可以用來進(jìn)行進(jìn)程間通信。

參考:
https://blog.csdn.net/luoshengyang/article/details/6768304
Android應(yīng)用程序進(jìn)程啟動過程的源代碼分析
Android應(yīng)用程序安裝過程源代碼分析
Android系統(tǒng)默認(rèn)Home應(yīng)用程序(Launcher)的啟動過程源代碼分析
Android進(jìn)程間通信(IPC)機(jī)制Binder簡要介紹和學(xué)習(xí)計劃

https://www.cnblogs.com/tiantianbyconan/p/5013863.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容