Activity啓動流程

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啓動

SystemUI在AMS執行systemReady時啓動,主要是經過Intent啓動包名爲com.android.systemui組件名爲SystemUIService的服務
SystemUI啓動成功後表示系統的通知欄和導航欄已經初始化成功,接下來就是啓動Launcher

Launcher啓動

Launcher的啓動在AMS的最後,經過startHomeActivityLocked把啓動Launcher的Activity並將其置於Activity棧頂,而後經過resumeFocusedStackTopActivityLocked將棧頂的Activity顯示到界面上,launcher的啓動就已經完成了
相關文章
相關標籤/搜索