Android app啟動流程(android系統啟動流程)

上一節回顧了一下Android的系統架構,這一節,主要來看看Android系統是怎麼啟動的。

Android系統架構淺析-「Android取經之路」

概述:

系統啟動流程

BootRom->BootLoader->Linux Kernel->Init->Zygote->SystemServer->Launcher(UI)

BootLoader層:主要包括Boot Rom和Boot Loader

Kernel層:主要是Android核心層

Native層:主要是包括init程序以及其fork出來的使用者空間的守護程序、HAL層、開機動畫等

JAVA Framework層:主要是AMS和PMS等Service的初始化

Application層:主要指SystemUI、Launcher的啟動

       

Android架構--圖片來源於gityuan

Android 系統啟動流程:

第一步:手機開機後,引導晶片啟動,引導晶片開始從固化在ROM裡的預設程式碼執行,載入載入程式到到RAM,bootloader檢查RAM,初始化硬體引數等功能

第二步:硬體等引數初始化完成後,進入到Kernel層,Kernel層主要載入一些硬體裝置驅動,初始化程序管理等操作。在Kernel中首先啟動swapper程序(pid=0),用於初始化程序管理、內管管理、載入Driver等操作,再啟動kthread程序(pid=2),這些linux系統的核心程序,kthread是所有核心程序的鼻祖;

第三步:Kernel層載入完畢後,硬體裝置驅動與HAL層進行互動。初始化程序管理等操作會啟動INIT程序 ,這些在Native層中

第四步:init程序(pid=1,init程序是所有程序的鼻祖,第一個啟動)啟動後,會啟動adbd,logd等使用者守護程序,並且會啟動servicemanager(binder服務管家)等重要服務,同時孵化出zygote程序,這裡屬於C Framework,程式碼為C 程式;

第五步:zygote程序是由init程序解析init.rc檔案後fork生成,它會載入虛擬機器,啟動System Server(zygote孵化的第一個程序);System Server負責啟動和管理整個Java Framework,包含ActivityManager,WindowManager,PackageManager,PowerManager等服務;

第六步:zygote同時會啟動相關的APP程序,它啟動的第一個APP程序為Launcher(UI),然後啟動Email,SMS等程序,所有的APP程序都有zygote fork生成。

下一節我們來一起看看Init程序,這個所有程序的鼻祖是如何啟動的。