Android初始化流程

Android啟動過程:
(1)啟動時首先啟動Linux基礎系統,然後引導加載Linux Kernel並啟動初始化進程。
(2)接著,啟動Linux守護進程(deamons),該進程啟動內容:
    啟動USB守護進程(usbd)來管理USB連接,
    啟動Android Debug Bridge守護進程(adbd)來管理adb連接,
    啟動Debug守護進程(debuggerd)來管理調試進程的請求(包括內存轉換),
    啟動無線接口守護進程(rild)來管理無線通信
(3)啟動Linux守護進程同時,啟動Zygote進程,該進程啟動內容:
    初始化一個Davlik虛擬機實例
    裝載Socket請求所需的類和監聽
    創建虛擬機實例來管理應用程序進程
(4)再接著,初始化runtime進程,該進程啟動需要處理操作:
    初始化服務管理器
    註冊服務管理器,以它作為默認Binder服務的Context管理器
(5)runtime初始化後,發送一個請求道Zygote,開始啟動服務,Zygote將為系統服務創建一個虛擬機實例,並啟動系統服務。
(6)緊接著,系統服務將啟動原生系統服務,主要包括Surface Flinger和Audio Flinger,這些本地服務將註冊到服務管理器。
(7)原生系統服務啟動Android管理服務,Android管理服務將都被註冊到服務管理器上。
(8)系統加載完所有的服務後會處於等待狀態,等待應用程序運行,每一個應用程序都將啟動一個單獨的進程。

Android應用程序調用底層硬件和服務(三種方式):
(1)App -> Runtime Service -> Lib
應用程序首先在應用層通過Binder IPC調用應用程序框架的Runtime Service,然後通過JNI與運行庫的原生服務綁定,並動態加載Hal庫,進而調用Linux內核層的Lernel Driver。
(2)App -> Runtime Service -> Native Service -> Lib
與第一種相比,隻是Runtime Service通過JNI綁定原生服務,再通過IPC機制調用原生服務進行動態加載的過程。
(3)App -> Runtime Service -> Native Deamon -> Lib
比原生服務調用更簡單,直接通過JNI綁定原生服務,再通過Socket調用守護進程進行動態加載。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。