Android App的運行環(huán)境及Android系統(tǒng)架構(gòu)概覽
Android基于linux內(nèi)核,面向移動終端的操作系統(tǒng)。主要包括以下幾個方面:
Application Framework:
這一層為應(yīng)用開發(fā)者提供了豐富的應(yīng)用編程接口,如 Activity Manager,Content Provider,Notification Manager,以及各種窗口 Widget 資源等。所有的APP都是運行在這一層之上。
Dalvik 虛擬機:
Dalvik VM采用寄存器架構(gòu),而不是JVM的棧架構(gòu),更適于移動設(shè)備。java源代碼經(jīng)過編譯成為.class字節(jié)碼文件,然后由谷歌提供的 dx工具將其轉(zhuǎn)化為Dalvik可識別的.dex文件。
Linux kernel:
每個APP應(yīng)用程序由一個獨立的Dalvik VM來解釋執(zhí)行,而一個Dalvik VM實例對應(yīng)一個linux內(nèi)核進程。
所以說,每個APP之間完全隔離,資源獨立。使得每個APP更加安全,但也不利于進程間通信
Android官方介紹
Android 系統(tǒng)架構(gòu)
Application framework
大部分開發(fā)者十分關(guān)心這一層。你必須要了解開發(fā)者會接觸到的所有API接口,大部分接口都與硬件抽象層(HAL層)接口一一對應(yīng),而且它們會告訴你如何實現(xiàn)你自己的驅(qū)動。
Binder IPC
Binder進程間通信機制幫助Application framework層能夠跨進程并且調(diào)用系統(tǒng)級服務(wù)。從根本上講,它幫助高級別的framework的API接口與Android系統(tǒng)服務(wù)進行交互。
系統(tǒng)服務(wù)
大部分Application framework api具備的功能都要依靠與某種系統(tǒng)服務(wù)進行通信從而操作底層硬件。系統(tǒng)服務(wù)根據(jù)不同的功能分成了若干模塊組件,例如Window Manager, Search Service, or Notification Manager。系統(tǒng)服務(wù)主要包含兩大塊:系統(tǒng)和媒體。前者對應(yīng)的服務(wù)包含如Window Manager 或 Notification Manager,后者對應(yīng)的服務(wù)都與播放或記錄媒體有關(guān)。
硬件抽象層Hardware abstraction layer (HAL)
硬件抽象層可以作為一個標(biāo)準(zhǔn)接口讓Android系統(tǒng)調(diào)用設(shè)備驅(qū)動層而不用管這些驅(qū)動和硬件時如何實現(xiàn)的。
Linux Kernel
大多數(shù)情況下,你自己開發(fā)設(shè)備驅(qū)動和開發(fā)linux設(shè)備驅(qū)動時一樣的。Android挑選了一個特定的linux內(nèi)核版本,這個版本包含了如wakelocks(一個內(nèi)存管理系統(tǒng)),Binder IPC驅(qū)動和其他一些特征,這些特征對于像Android一樣的移動嵌入式平臺都非常重要。你也可以根據(jù)自己的需求選擇合適的kernel版本,只要它能支持一些必要的屬性如Binder IPC驅(qū)動等。但是,我們?nèi)匀煌扑]你使用最新版本的Android內(nèi)核。
相關(guān)知識點:
應(yīng)用程序進程間隔離機制:
Android系統(tǒng)包括四層架構(gòu):從底層往上依次是Linux kernel層、C/C++函數(shù)庫與Android運行時環(huán)境(Dalvik VM等)層、Android Framwork框架層、應(yīng)用程序?qū)?。其中,Android運行時環(huán)境層類似Java里的JRE層,主要用來運行java程序,不過此處的虛擬機是Dalvik虛擬機。每一個Android應(yīng)用程序都運行在單獨的Davlik進程里,Dalvik虛擬機針對同時高效運行多個虛擬機而優(yōu)化,在這一層實現(xiàn)了應(yīng)用程序的進程間隔離。
Dalvik虛擬機與JVM區(qū)別:
JVM直接從.class或Jar包中加載字節(jié)碼解釋運行,Dalvik通過DX工具將.class文件編譯為.dex文件(Dalvik Executable)來運行。
JVM采用棧結(jié)構(gòu),而Dalvik采用寄存器結(jié)構(gòu),更適于移動設(shè)備。
為何Android要采用Dalvik虛擬機而不是JVM呢?
大多數(shù)虛擬機(包括JVM)都是基于棧的,而Dalvik虛擬機則是基于寄存器的,性能更好,不過也導(dǎo)致硬件通用性略差;
運行專有.dex文件。DX工具對.class文件編譯時,去除里面的冗余信息,并把所有.class文件整合到一個文件中,提高了性能。同時DX工具還會對.dex文件進行性能優(yōu)化。
- Android 架構(gòu)之?dāng)?shù)據(jù)庫框架搭建
- Android Jetpack架構(gòu)組件Lifecycle詳解
- Android Jetpack架構(gòu)組件 ViewModel詳解
- Android登錄代碼MVP架構(gòu)詳解
- Android應(yīng)用架構(gòu)思想分析
- Android 生命周期架構(gòu)組件使用方法
- Android架構(gòu)組件Room的使用詳解
- 詳解Android中的MVP架構(gòu)分解和實現(xiàn)
- Android視圖控件架構(gòu)分析之View、ViewGroup
- 淺析Android系統(tǒng)的架構(gòu)以及程序項目的目錄結(jié)構(gòu)
- Android操作系統(tǒng)的架構(gòu)設(shè)計分析
- Android 架構(gòu)之?dāng)?shù)據(jù)庫框架升級
相關(guān)文章
Android開發(fā)Jetpack組件Room用例講解
這篇文章主要為大家介紹了Android?Jetpack組件Room的使用案例的詳細講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-02-02Android編程下拉菜單spinner用法小結(jié)(附2則示例)
這篇文章主要介紹了Android編程下拉菜單spinner用法,結(jié)合實例較為詳細的總結(jié)分析了下拉菜單Spinner的具體實現(xiàn)步驟與相關(guān)技巧,并附帶兩個示例分析其具體用法,需要的朋友可以參考下2015-12-12android底部彈出iOS7風(fēng)格對話選項框(QQ對話框)--第三方開源之IOS_Dialog_Library
這篇文章主要介紹了android底部彈出iOS7風(fēng)格對話選項框(QQ對話框)--第三方開源--IOS_Dialog_Library的相關(guān)資料,需要的朋友可以參考下2015-11-11Android下拉刷新PtrFrameLayout的使用實例代碼
本篇文章主要介紹了Android下拉刷新PtrFrameLayout的使用實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06