android時序圖

= Android啓動流程  =
Android啓動時序圖 

== Linux啓動  ==
=== 開機過電,復位器件  ===
=== 執行Bootloader程序  ===
arm中是uboot或者fastboot
如果在fastboot的運行過程中沒有按下特別的按鍵,執行第一個應用程序(即Linux Kernel),從NAND Flash中讀取 
=== 初始化Linux Kernel  ===
=== 讀取init.rc文件  ===
位於設備根目錄下 
== Android啓動  ==
=== 啓動初始化進程init  ===

==== init啓動Linux守護進程  ====

==== init啓動Zygeote進程  ====

受精卵,所有apk應用進程的父進程 
==== init初始化runtime進程  ====

=== runtime初始化並註冊Service Manager  ===

runtime向zygote申請實例化一個Dalvik Vm並啓動SystemServer SystemServer啓動native serivce(Surface Flinger和Audio Flinger),並將這些native Service註冊在ServiceManager中。 


SystemServer啓動android管理服務,都會被註冊ServiceManager中。 

=== Zygote孵化home和contact進程  ===
至此Android啓動完成 

== Zygote啓動分析  ==

Zygote的可執行文件在/system/bin/app_process中 
相關配置信息在/init.rc文件中 
=== 啓動Socket服務端口  ===
Dalvik VM執行的第一個類ZygoteInit.java,Socket的啓動也在此文件中 private static void registerZygoteSocket()靜態函數中啓動。 String env=System.getenv(ANDROID_SOCKET_ENV)獲取系統爲Zygote分配的Socket描述字。 用createFileDescriptor()創建一個文件描述符,再構造LocalServerSocket對象。 main()中調用runSelectLoopMode()進入非阻塞獨模式 在while(true)中調用ZygoteConnection類的runOnce()處理接收的命令。 
=== 加載preload-classes  ===
作用:預裝Framework的大部分類和資源 類列表在/system/framework/framework.jar文件中的preload-classer文本文件中。 ZygoteInit.java的main()函數中通過調用preloadClasses()讀取preload—classes的列表來裝載這些類 
=== 加載preload-resources  ===
preload-resources在/system/framework/base/res/res/values/arrays.xml文件中定義。 ZygoteInit.java的main()函數中通過調用preloadResources()讀取arrays.xml的列表來裝載這些資源。 preloadResources()調用preloadDrawable()來加載Drawable類資源,存於mResources類內部的Drawable列表內,調用preloadColor()加載Color類資源,存於mResources的Color列表內。 
=== 啓動SystemServer  ===
從ZygoteInit.java的main()調用startSystemServer()開始。 
==== 啓動各種系統服務線程  ====
從SystemServer的main()開始執行,先調用init1()進行一些Dalvid VM的相關初始化工作。init1()內部會調用java端的init2()。主要的系統服務在init2()中完成。 init2()創建一個ServerThread線程,從ServerThread的run()開始真正啓動系統服務。 AmS啓動後: 1.調用main() 2.調用AmS.setSystemProcess() 3.調用Ams.installProviders() 4.調用systemReady() 5.啓動第一個activity,即home程序。 
在Ams的startHomeActivityLocked()中發出一個intent,它包含CATEGORY_HOME,任何能相應此intent的程序都能成爲第一個activity,成爲home程序。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章