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調用守護進程進行動態加載。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!