1、啟動電源以及系統啟動
當電驚按下時引導芯片代碼從預定義的地方(固化在 ROM )開始執行,加載引導程式
BootLoader RAM ,然后執行,
2、引導程式 Bootloader
引導程式 BootLoader 是在 Android 作業系統開始運行前的 個小程式,它的主要作
用是把系統 OS 拉起來并運行,
3、Linux 內核啟動
當內核啟動 ,設定快取、被保護存盤器、計劃串列、加載驅動,當內核完成系統設
置時,它首先在系統檔案中尋找 init.rc 檔案,并啟動 init 行程,
4、init 行程啟動
init 程啟動做了很多的作業,總的來說主要做了以下幾件事:
(1) 創建和掛載啟動所的檔案目 錄,
(2)初始化和啟動屬性服務,
(3)決議 init.rc 組態檔并啟動 Zygote 行程,
(4)決議 init.rc 組態檔并啟動ServiceManager行程,
5、ServiceManager啟動流程:
(1)打開binder驅動,并呼叫mmap()方法分配128k的記憶體映射空間:binder_open(),
(2)通知binder驅動使其成為守護行程:binder_become_context_manager();
(3)驗證selinux權限,判斷行程是否有權注冊或查看指定服務;
(4)進入回圈狀態,等待Client端的請求:binder_loop(),
(5)注冊服務的程序,根據服務名稱,但同一個服務已注冊,重新注冊前會先移除之前的注冊資訊,
(6)死亡通知: 當binder所在行程死亡后,會呼叫binder_release方法,然后呼叫
binder_node_release這個程序便會發出死亡通知的回呼.
ServiceManager最核心的兩個功能為查詢和注冊服務:
注冊服務:記錄服務名和handle資訊,保存到svclist串列;
查詢服務:根據服務名查詢相應的的handle資訊,
6、Zygote 行程啟動
Zygote 行程啟動共做了如下幾件事
(1)創建 AppRuntime 并呼叫其 start 方掛,啟動 Zygote 行程,
(2)創建 Java 虛擬機并為 Java 虛擬機注冊 JNI 方法
(3)通過刑 周用 Zygotelnit main 函式進入 Zygote Java 框架層,
(4)通過 registerZygoteSocket方怯創建服務器端 Socket ,并通過 runSelectLoop方怯
等AMS的請求來創建新的應用程式行程,
(5)啟動 SystemServer 行程,
7、SystemServer 行程被創建后,主要做了如下作業:
(1)啟動 Binder 執行緒池,這樣就可以與其他行程進行通信
(2)創建 SystemServiceManager ,其用于對系統的服務進行創建、啟動和生命周期管理,
(3)啟動各種系統服務,(系統服務分為了三種型別,分別是引導服務、核心服務和其他
服務,其中其他服務是一些非緊要和不需要立即啟動的服務,PMS、AMS屬于核心服務)
8、Launcher 啟動
SystemServer 行程在啟動的程序中會啟動PackageManagerService,PackageManagerService
啟動后會將系統中的應用程式安裝完成,在此前已經啟動的AMS會將Launcher啟動起來,
SystemServer 行程啟動的AMS會啟動Launcher, Launcher 啟動后會將己安裝應用的快捷圖示
顯示到界面上,
如下是系統啟動的流程

這篇文章都是看《Android進階解密》做的筆記
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/290687.html
標籤:其他
