1.BootLoader:java
Bootloader 就是在操做系統內核運行以前運行的一段小程序。經過這段小程序,咱們能夠初始化硬件設備、創建內存空間的映射圖,
從而將系統的軟硬件環境帶到一個合適的狀態,以便爲最終調用操做系統內核準備好正確的環境
2.Kernel初始化介紹android
cpu初始化
初始化內存佈局
設置系統初始化進程即0號進程
初始化每一個處理器的可運行隊列,設置系統初始化進程即0號進程
建立1號內核線程
3.建立init進程小程序
init進程是Linux內核啓動後建立的第一個用戶空間的進程,init在初始化過程當中會啓動不少重要的守護進程。
自動Zygote進
4.Zygote進程app
1.初始化AppRuntime
啓動虛擬機
註冊JNI
調用JNI函數 2.解析傳入參數 3.根據參數啓動zygote
5.ZygoteInit main()socket
1.建立ZygoteServer並啓動 2.建立本地socket服務 3.預加載系統類和資源 4.fork SystemServer進程
6.SystemServer主要作的事情函數
1.調整時間 2.設置語言 3.初始化Looper爲mainLooper 5.裝載庫:libandroid_server.so 6.初始化Context 7.建立SystemServiceManager負責系統Service啓動 8.建立和啓動java服務 9.調用Looper.loop()進入處理消息循環
10.啓動AMS
11.啓動PMS
7.ActivityManagerService啓動oop
在AMS的構造函數中初始化了不少變量和一些服務,若是管理廣播的隊列、電池和CPU等相關服務,服務會在start方法中啓動,並等待啓動完成。
最後,調用AMS的systemReady方法完成初始化,在SystemReady中啓動桌面。
8.PackageManagerService啓動佈局
初始化相關服務 判斷設備是不是第一次啓動是經過判斷文件data/system/packages.xml是否存在進行判斷 首次開機和非首次開機區別就在於掃描app目錄時,首次開機作了dex2ota的動做,相對來講就要較非首次開機耗時
9.Launcher啓動介紹ui
SystemUI在AMS執行systemReady時啓動,主要是經過Intent啓動包名爲com.android.systemui組件名爲SystemUIService的服務
SystemUI啓動成功後表示系統的通知欄和導航欄已經初始化成功,接下來就是啓動Launcher
Launcher的啓動在AMS的最後,經過startHomeActivityLocked把啓動Launcher的Activity並將其置於Activity棧頂,而後經過resumeFocusedStackTopActivityLocked將棧頂的Activity顯示到界面上,launcher的啓動就已經完成了