Android系統(tǒng)架構(gòu)
如該經(jīng)典圖,將android大致分為四層:Linux內(nèi)核層、庫和運行時、Framework層和應用層。
- Linux
android最低層最核心的部分,包含android系統(tǒng)的核心服務,包括硬件驅(qū)動、進程管理、安全系統(tǒng)等。
- Dalvik 與 ART
Dalvik包含一整套android運行環(huán)境虛擬機,每個app都會分配Dalvik虛擬機來保證互相之間不受干擾保持獨立。
Dalvik特點:運行時編譯。
ART特點:安裝時編譯。(5.X之后取代Dalvik)
- Dalvik支持已轉(zhuǎn)換為.dex格式的java應用程序的運行.。
.dex格式:專為Dalvik設計的一種壓縮格式,適合內(nèi)存和處理器速度有限的系統(tǒng)。
每一個Dalvik應用作為一個獨立的Linux進程執(zhí)行,在有限的內(nèi)存中允許同時運行多個虛擬機的實例。獨立的進程可以防止在虛擬機崩潰時所有程序都被關(guān)閉。
因為Dalvik虛擬機,Android開發(fā)者只需按照谷歌提供的SDK即可輕松創(chuàng)建APP,不需要顧忌硬件、底層驅(qū)動等問題,在每次執(zhí)行應用時,Dalvik虛擬機都會將程序的語言由高級語言編譯為機器語言,Dalvik依靠一個Just-In-Time(JIT)編譯器去解釋字節(jié)碼,每次運行程序都需要做上述操作,將字節(jié)碼編譯為機器語言;所以很長時間以來,Dalvik虛擬機一直被用戶指責為拖慢安卓系統(tǒng)運行速度不如iOS的根源。
- ART模式(Android Runtime),谷歌收購了一家名為Flexycore的公司,該公司一直致力于Android系統(tǒng)的優(yōu)化,ART模式也是在該公司的優(yōu)化方案上演進而來。
啟用ART模式后,系統(tǒng)在安裝應用的時候會進行一次預編譯,在安裝應用程序時會先將代碼轉(zhuǎn)換為機器語言存儲在本地,這樣運行程序時就不會每次都進行一次編譯了,將提高執(zhí)行效率。
RAM(random access memory)即隨機存儲內(nèi)存,這種存儲器在斷電時將丟失其存儲內(nèi)容,故主要用于存儲短時間使用的程序。
ROM(Read-Only Memory)即只讀內(nèi)存,是一種只能讀出事先所存數(shù)據(jù)的固態(tài)半導體存儲器。
-
Framework
Framework
-
Standard libraries
Standard libraries
- Application
如下圖,分別為NDK和Java開發(fā)App的主要構(gòu)成。
無論哪種App都有Android Mainfest文件、Dalvik Classes、Resource Bundle。
開發(fā)者應關(guān)注每個版本的SDK修改,從而提高應用的兼容性。
Android App組件架構(gòu)
畫重點!
android 四大組件:Activity、BroadCastReciever、ContentProvider、Service
activity負責向用戶展示信息和處理結(jié)果,信息可以通過資源獲取,也可以通過ContentProvider獲取其他應用信息、Service從后臺計算、下載處理的結(jié)果、BroadCastReciever獲取廣播信息。
通過Intent,組件之間進行通信,傳遞信息,交換數(shù)據(jù),形成各自獨立而又緊密聯(lián)系的關(guān)系。
Context(受到萬千佳麗寵愛有木有)
activity、service、application都繼承自Context
創(chuàng)建context的時間點:創(chuàng)建activity、service、application
應用程序第一次啟動,android會創(chuàng)建一個application對象,同時創(chuàng)建application context,所有組件共同擁有一個context對象,貫穿整個應用盡扯那個的生命周期,為應用全局提供功能環(huán)境的支持。
創(chuàng)建activity、service時,系統(tǒng)創(chuàng)建activity實例、service
實例的context對象。所以通過getApplicationContext()取得整個App的context
Android系統(tǒng)目錄
/system/app/ | 系統(tǒng)app |
/system/bin/ | 存放Linux自帶組件 |
/system/build.prop | 系統(tǒng)屬性信息 |
/system/fonts/ | 字體 |
/system/framework/ | 系統(tǒng)核心文件、框架層 |
/system/lib/ | 幾乎所有共享庫文件(.so) |
/system/media/ | 系統(tǒng)提示音、鈴聲 |
/system/usr/ | 用戶配置文件 |
/data/app/ | 用戶數(shù)據(jù)信息,安裝的app或者升級的app |
/data/data/ | app的數(shù)據(jù)信息、文件信息、數(shù)據(jù)庫信息等 |
/data/system/ | 手機各項系統(tǒng)信息 |
/data/misc/ | 大部分WiFi、VPN信息 |