android的啟動流程是從底層開始進行的,具體如下所示:
Android是基于Linux內核的系統,Android的啟動過程主要分為兩個階段,首先是Linux內核的啟動,然后是Android框架的啟動。
可以將Andorid系統的啟動流程分為以下五個層進行展開,分別是Loader層,Kernel層,Native層,Framework層,Application層。
Loader層
1.首先按開機鍵后,引導芯片將引導程序從ROM中加載到RAM中
2.引導程序(Bootloader)的主要作用就是將操作系統映像文件拷貝到RAM中
Kernel層
3.接著通過start_kernel函數和reset_kernel函數完成對kernel的初始化操作,同時啟動用戶空間的init進程
4.init進程是是一個十分重要的祖先進程,linux中的所有進程都是由init進程直接或者間接fork出來的,init進程一啟動時就會讀取init.rc腳本文件
Native層(包括利用surfaceflinger創建動畫,孵化zygote進程,以及用戶守護進程)
5.init進程創建后,會fork出一個zygote進程,這個進程是所有Java進程的父進程,所有的服務都會向其進行請求來fork出java進程
6.init還會創建servicemanager進程,它是Binder IPC通信過程中的守護進程,并會集中管理系統內的所有服務
Framework層
7.由zygote進程通過startSystemServer()方法fork出SystemServer進程,該進程同樣是Andorid系統內重要的進程,AMS,PMS,WMS等多個進程都是由Systemserver進程fork出來的,SystemServer包含了startBootstrapServices(),startCoreServices(),startOtherServices()創建服務的方法:
Application層
zygote孵化的第一個進程是launcher進程,也就是桌面進程,在fork出Launcher進程后,AMS會向Surfaceflinger請求結束掉開機動畫,同時顯示桌面程序,這樣就完成了系統界面的加載與顯示
Application層
zygote孵化的第一個進程是launcher進程,也就是桌面進程,在fork出Launcher進程后,AMS會向Surfaceflinger請求結束掉開機動畫,同時顯示桌面程序,這樣就完成了系統界面的加載與顯示