ZygoteZygote 是什么?Zygote 在 Android 系統(tǒng)中是一個(gè) native 進(jìn)程,,是 Android 系統(tǒng)上所有應(yīng)用的父進(jìn)程,,我們系統(tǒng)上的 App 都是通過 Zygote 進(jìn)程 fork 出來的,而 Zygote 進(jìn)程則是由 Linux 系統(tǒng)用戶空間的第一個(gè)進(jìn)程 init 進(jìn)程通過 fork 的方式創(chuàng)建的,。(init 進(jìn)程是手機(jī)開機(jī)以后的第一個(gè)進(jìn)程) Zygote 的作用是什么,?
Zygote 是怎么啟動(dòng)的?
需要注意的是,,Zygote 進(jìn)程使用的是 socket 通信,還沒有使用 Binder 進(jìn)行通信,。 system_serversystem_server 進(jìn)程是系統(tǒng)啟動(dòng)以后 Zygote 創(chuàng)建的第一個(gè)進(jìn)程,,在其中有很多系統(tǒng)提供的服務(wù),比如 AMS(ActivityManagerService),、WMS(WindowManagerService)、PWS(PackageManagerService)等等,。 在 Zygote 內(nèi)部的 startSystemServer() 中啟動(dòng) system_server 進(jìn)程,,方法內(nèi)通過拋出異常,然后捕獲異常的技巧,,使得 system_server 進(jìn)程跳過了 Zygote 進(jìn)程的后續(xù)步驟進(jìn)入 system_server 的 java 世界,,這些步驟包括使得Zygote進(jìn)入無限循環(huán)的runSelectLoopMode()方法,。 其中 system_server 有個(gè)重要的特點(diǎn)是,它支持的使用 Binder 進(jìn)行進(jìn)程間通信,,它已經(jīng)進(jìn)入了 Binder 的世界,,不用跟 Zygote 進(jìn)程一樣使用 Socket。 另一個(gè)特點(diǎn)是,,system_server是和zygote共存亡的,,只要system_server被殺死,zygote也會(huì)把自己殺掉,,這就導(dǎo)致了系統(tǒng)的重啟,。 AMS (ActivityManagerService)AMS 是 Android 中最核心的服務(wù),主要負(fù)責(zé)系統(tǒng)中四大組件的啟動(dòng),、切換,、調(diào)度以及應(yīng)用程序的管理和調(diào)度工作,其職責(zé)與操作系統(tǒng)中的進(jìn)程管理和調(diào)度模塊相類似,,因此它在Android中非常重要,。 AMS 運(yùn)行在 system_server 中,所以我們可以通過 Binder 通信來和 system_server 進(jìn)程進(jìn)行進(jìn)程間通信,。 Instrumentation每個(gè)應(yīng)用程序都有一個(gè) Instrumentation 對(duì)象,,每個(gè) Activity 持有它的引用,ActivityThread要?jiǎng)?chuàng)建和暫停 Activity 時(shí),,都是通過 Instrumentation 實(shí)現(xiàn),。 ActivityStarter負(fù)責(zé)處理 Intent 、Flag,、選擇啟動(dòng)的 Task,、復(fù)用 Activity 等邏輯 ActivityRecord每個(gè) Activity 在 AMS 中都有一個(gè)對(duì)應(yīng)的 ActivityRecord,記錄 Activity 的信息 TaskRecord就是我們所講的任務(wù)棧,、先進(jìn)后出,、存儲(chǔ) ActivityRecord ActivityStack用來管理TaskRecord ,ActivityStack 是由 ActivityStackSupervisor 創(chuàng)建的,。 ActivityStackSupervisorAMS 通過 ActivityStackSupervisor 操作 ActivityStack ApplicationThread是 ActivityThread 的一個(gè)內(nèi)部類,,繼承于 ActivityThread表示 App 主線程,,有靜態(tài) main 入口函數(shù) ClientLifecycleManager調(diào)用ClientTransaction,讓 AMS 切換到 APP 進(jìn)程執(zhí)行生命周期 |
|