久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android面試Activity的啟動(dòng)流程

 狄倫視角 2021-05-30

Zygote

Zygote 是什么?

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 的作用是什么,?

  1. 啟動(dòng) system_server 進(jìn)程

  2. 孵化應(yīng)用進(jìn)程

Zygote 是怎么啟動(dòng)的?

  1. init 進(jìn)程 fork 出 Zygote 進(jìn)程

  2. 啟動(dòng)虛擬機(jī),,注冊(cè) JNI 函數(shù)

  3. 加載系統(tǒng)資源,,一系列初始化(包括系統(tǒng)資源,openGL,,webView等)

  4. 啟動(dòng) system_server 進(jìn)程

  5. 進(jìn)入 socket 連接的 loop

需要注意的是,,Zygote 進(jìn)程使用的是 socket 通信,還沒有使用 Binder 進(jìn)行通信,。
過程大致如下:

Android世界之盤古女媧——Zygote

system_server

system_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)建的,。
ActivityRecord,、TaskRecord、ActivityStack以及Activity啟動(dòng)模式詳解

ActivityStackSupervisor

AMS 通過 ActivityStackSupervisor 操作 ActivityStack

ApplicationThread

是 ActivityThread 的一個(gè)內(nèi)部類,,繼承于 IApplicationThread.Stub ,,可以看出是一個(gè) Binder 對(duì)象,是 AMS 向 ActivityThread 通信的橋梁,。

ActivityThread

表示 App 主線程,,有靜態(tài) main 入口函數(shù)

ClientLifecycleManager

調(diào)用ClientTransaction,讓 AMS 切換到 APP 進(jìn)程執(zhí)行生命周期

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多