Android app啟動流程(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程序,這個所有程序的鼻祖是如何啟動的。