天天看點

Android系統啟動流程分析(一)

<div class="article-copyright">
				版權聲明:如需轉載請注明出處					https://blog.csdn.net/zhonglunshun/article/details/78605666				</div>
							            <div class="markdown_views prism-atom-one-dark">
						<!-- flowchart 箭頭圖示 勿删 -->
						<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg>
						<p>因為篇幅比較長,是以分幾篇講解,希望童鞋們會有耐心看完,講解過程中我盡量少貼代碼多寫注釋,畢竟,貼代碼多了頭暈得很;我剛學習的時候也是一篇一篇部落格篩選,很是麻煩,後來發現一般代碼少的,帶圖的,注釋多的一般是好文章,我也會盡量按照這個标準來寫部落格,還有一點就是因為我的水準有限,我會盡量按照我的了解來說的很清晰,是以有些因為自身了解問題導緻錯誤的,望大家發現問題後批評指正,共同進步;</p>
           

首先我們來看下Android系統的架構,這張圖網上找的,看起來很清晰;

Android系統啟動流程分析(一)

有朋友說4.4以後使用art替代了dalvik,想要了解更多可以參考這篇部落格《Android 中的Dalvik和ART是什麼,有啥差別》;

  • Linux核心:我們可以把Android系統當做linux的一個發行版,不過Android系統核心在傳統linux核心上做了相當一部分改進;有興趣的朋友可以看下這篇文章:簡析Android對Linux核心的改動;
  • AndroidRuntime:處于Linux核心層以及應用架構層中間,而Java的運作環境依賴于Java虛拟機,是以AndroidRuntime對于android系統非常重要。Init程序是Linux環境下非常重要的一個程序,而Zygote程序是Java環境下的第一個程序,所有其他的Java環境下的程序都是由Zygote程序來進行fork的,而init程序在啟動Zygote程序之後,初始化Zygote程序之前,會先進行AndroidRuntime的啟動和環境建立;通過運作環境加載運作庫,不知道我這麼了解對不對;
  • Framework: 說簡單點,Framework具體的工作也就是為android應用開發的開發人員提供了一系列的服務和API的接口。至于Framework是怎麼啟動的,加載了什麼東西,在後面的文章我會以SystemUI為例詳細解說。
  • Application這個就是運作在上面的一系列Apk應用程式了,比如打電話,浏覽器,月曆,Launcher等一個個應用程式;

    以上便是整個Android系統架構的簡要說明;

接下來,我們了解一下系統是怎麼啟動的,在此之前,我們先看一張圖;

這裡有一個從按下電源鍵開機到系統啟動的流程圖,相信看了之後大家大緻了解了整個系統的啟動流程:

Android系統啟動流程分析(一)

這裡還有一片外文文章也是将啟動過程的,很形象,有興趣的可以戳進去;

如果還是不太懂,我講的更詳細一點,一般開機過程大緻可以分為三個大階段:

1. OS級别,由bootloader載入linux kernel後,kernel開始初始化, 并載入built-in的驅動程式。Kernel完成開機後,載入init process,切換至user-space後,結束kernel 的循序過程(sequence),進入排程模式(process scheduling)。

2. Android-level,由init process 開始,讀取init.rc,Native服務啟動,并啟動重要的外部程式,例如:servicemanager、Zygote以及System Server。

3. Zygote-Mode,Zygote啟動完System Server後,進入Zygote Mode,在Socket 等候指令。随後,使用者将看到一個桌面環境(Home Screen)。桌面環境由一個名為Launcher的應用程式負責提供。

Android系統啟動流程分析(一)

注:Zygote主要負責啟動System server和執行android程式(APK)。成功啟動System server後會使用socket方式監聽(monitorandroid apps/prcesses)

上面隻是一個大體的介紹,接下來我們詳細了解下從電源鍵按下到系統啟動完成中間經曆了什麼;

繼續閱讀