Android框架概述:
Android的架構(gòu)是分層的杈湾,非常清晰矢门,分工很明確。Android本身是一套軟件堆疊(Software Stack)渐溶,或稱為"軟件疊層架構(gòu)"辉浦,疊層主要分成三層:操作系統(tǒng)、中間件茎辐、應(yīng)用程序。
1掂恕、Applications(應(yīng)用程序)
Android平臺(tái)不僅僅是操作系統(tǒng)拖陆,也包含了許多應(yīng)用程序,諸如SMS短信客戶端程序懊亡、電話撥號(hào)程序依啰、圖片瀏覽器、Web瀏覽器等應(yīng)用程序等等店枣。
這些平臺(tái)隨附的應(yīng)用與用戶可以選擇安裝的應(yīng)用一樣速警,沒有特殊狀態(tài),因此第三方應(yīng)用可成為用戶的默認(rèn)網(wǎng)絡(luò)瀏覽器鸯两、短信 Messenger 甚至默認(rèn)鍵盤(有一些例外闷旧,例如系統(tǒng)的“設(shè)置”應(yīng)用)。
但是毫無疑問的是:所有應(yīng)用程序都是用Java語言編寫的钧唐,并且這些應(yīng)用程序都是可以被開發(fā)人員開發(fā)的其他應(yīng)用程序所替換的忙灼,這點(diǎn)不同于傳統(tǒng)手機(jī)操作系統(tǒng)固化在系統(tǒng)內(nèi)部的系統(tǒng)軟件,Android應(yīng)用程序更加靈活和個(gè)性化钝侠。
2该园、Java APIFramework(應(yīng)用程序框架)
應(yīng)用程序框架層是我們從事Android開發(fā)的基礎(chǔ),很多核心應(yīng)用程序是通過這一層來實(shí)現(xiàn)其核心功能的帅韧,開發(fā)人員也可以完全訪問核心應(yīng)用程序所使用的API框架里初。
該層簡(jiǎn)化了組件的重用,任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的安全性)忽舟,這使得開發(fā)人員可以直接使用其提供的組件來進(jìn)行快速的應(yīng)用程序開發(fā)双妨,也可以通過繼承而實(shí)現(xiàn)個(gè)性化的拓展。
下面對(duì)各個(gè)模塊進(jìn)行解釋:
- 內(nèi)容提供器(Content Providers):使得應(yīng)用程序可以訪問另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫)萧诫,或者共享它們自己的數(shù)據(jù)斥难。
- 視圖管理系統(tǒng)(View System):可以用來構(gòu)建應(yīng)用程序的基本組件,包括列表Lists帘饶、文本框Text boxes哑诊、按鈕Buttons等等。
- 活動(dòng)管理器(Activity Manager):用來管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能及刻。
- 位置管理器(Location Manager):提供位置服務(wù)镀裤。
- 包管理器(Package Manager) :用來管理 Android系統(tǒng)內(nèi)的程序竞阐。
- 通知管理器(Notification Manager):使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息。
- 資源管理器(Resource Manager):提供非代碼資源的訪問暑劝,如本地字符串骆莹、圖形和布局文件。
- 電話管理器(Telephony Manager):提供電話相關(guān)功能服務(wù)担猛。
- 窗口管理器(Window Manager):用來管理所有的窗口程序幕垦。
- XMPP服務(wù)(XMPP Service):提供Google Talk服務(wù)。
這些服務(wù)的解釋在初學(xué)者看來可能會(huì)非掣盗晦澀難懂先改,而且也不知道我在說些什么當(dāng)然也記不住我所說的,這再正常不過了蒸走,現(xiàn)在有個(gè)印象就好仇奶,等我們開發(fā)用到相關(guān)功能時(shí)就會(huì)豁然開朗啦~
3、Libraries(系統(tǒng)運(yùn)行庫)
與PC一樣比驻,每個(gè)Android應(yīng)用程序都有自己的進(jìn)程该溯,每個(gè)Android應(yīng)用程序都運(yùn)行在Dalvik虛擬機(jī)之上,Dalvik虛擬機(jī)只執(zhí)行.dex的可執(zhí)行文件别惦。
當(dāng)Android應(yīng)用程序通過編譯狈茉,最后還需要通過SDK中的dx工具轉(zhuǎn)化成.dex格式才能正常在虛擬機(jī)上執(zhí)行。所以說當(dāng)我們使用上面的Android應(yīng)用框架時(shí)步咪,Android系統(tǒng)會(huì)通過一些C/C++庫來支持我們使用的各個(gè)組件论皆,使其能更好地為我們服務(wù)。
當(dāng)然了猾漫,這里面還分為兩個(gè)部分:
-
系統(tǒng)庫
系統(tǒng)庫是應(yīng)用程序框架的支撐点晴,是連接應(yīng)用程序框架層與Linux內(nèi)核層的重要紐帶。- WebKit:一套網(wǎng)頁瀏覽器的軟件引擎悯周。
- OpenMAX AL:一套嵌入式的多媒體應(yīng)用標(biāo)準(zhǔn)
- Libc:從BSD繼承來的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫粒督,專門為基于embedded linux的設(shè)備定制。
- Media Framework: 多媒體庫禽翼,基于PacketVideo OpenCore;支持多種常用的音頻屠橄、視頻格式錄制和回放,編碼格式包括MPEG4闰挡、MP3锐墙、H.264、AAC长酗、ARM溪北。
- OpenGL|ES:根據(jù)OpenGL ES 1.0API標(biāo)準(zhǔn)實(shí)現(xiàn)的3D繪圖函數(shù)庫。
- Surface Manager:執(zhí)行多個(gè)應(yīng)用程序時(shí)候,負(fù)責(zé)管理顯示與存取操作間的互動(dòng)之拨,另外也負(fù)責(zé)2D繪圖與3D繪圖進(jìn)行顯示合成茉继。
- SQLite:小型的關(guān)系型數(shù)據(jù)庫引擎。(我們以后會(huì)經(jīng)常和它打交道蚀乔,無論哪種類型APP的開發(fā)烁竭。)
- FreeType:提供點(diǎn)陣字與向量字的描繪與顯示。
- SGL:底層的2D圖形渲染引擎吉挣。
- SSL:在Andorid上通信過程中實(shí)現(xiàn)握手派撕。
-
Android運(yùn)行時(shí)
Android應(yīng)用程序時(shí)采用Java語言編寫,程序在Android運(yùn)行時(shí)中執(zhí)行听想,其運(yùn)行時(shí)分為核心庫和ART虛擬機(jī)兩部分腥刹。- ART虛擬機(jī):正如上文所說,每個(gè)Android應(yīng)用程序都有一個(gè)專有的進(jìn)程汉买,并且不是多個(gè)程序運(yùn)行在一個(gè)虛擬機(jī)中,而是每個(gè)Android程序都有一個(gè)ART虛擬機(jī)的實(shí)例佩脊,并在該實(shí)例中執(zhí)行蛙粘。
相比于以前采用的Dalvik虛擬機(jī)(一種基于寄存器的Java虛擬機(jī),而不是傳統(tǒng)的基于棧的虛擬機(jī)威彰,并進(jìn)行了內(nèi)存資源使用的優(yōu)化出牧,這使得它在運(yùn)行速度上占有很大優(yōu)勢(shì)),ART是安裝的時(shí)候就將應(yīng)用程序編譯好了歇盼,所以在執(zhí)行的時(shí)候直接就可以運(yùn)行的舔痕,這就使得應(yīng)用的安裝雖然慢一些,但開啟和運(yùn)行應(yīng)用的速度要快很多豹缀。 - 核心庫:核心庫提供了Java語言API中的大多數(shù)功能伯复,同時(shí)也包含了Android的一些核心API,如:android.os邢笙、android.net啸如、android.media等等。
- ART虛擬機(jī):正如上文所說,每個(gè)Android應(yīng)用程序都有一個(gè)專有的進(jìn)程汉买,并且不是多個(gè)程序運(yùn)行在一個(gè)虛擬機(jī)中,而是每個(gè)Android程序都有一個(gè)ART虛擬機(jī)的實(shí)例佩脊,并在該實(shí)例中執(zhí)行蛙粘。
4氮惯、HAL(硬件抽象層)
硬件抽象層提供標(biāo)準(zhǔn)界面叮雳,向更高級(jí)別的 Java API 框架顯示設(shè)備硬件功能。
HAL 包含多個(gè)庫模塊妇汗,其中每個(gè)模塊都為特定類型的硬件組件實(shí)現(xiàn)一個(gè)界面帘不,例如相機(jī)或藍(lán)牙模塊。當(dāng)框架 API 要求訪問設(shè)備硬件時(shí)杨箭,Android 系統(tǒng)將為該硬件組件加載庫模塊寞焙。
5、Linux Kernel(Linux內(nèi)核)
Android是基于Linux內(nèi)核提供核心系統(tǒng)服務(wù)的,例如:安全棺弊、內(nèi)存管理晶密、進(jìn)程管理、網(wǎng)絡(luò)堆棧模她、驅(qū)動(dòng)模型等稻艰。
Linux Kernel也作為硬件和軟件之間的抽象層,它隱藏具體硬件細(xì)節(jié)而為上層提供統(tǒng)一的服務(wù)侈净。
如果你學(xué)過計(jì)算機(jī)網(wǎng)絡(luò)的話就會(huì)知道分層的好處:使用下層提供的服務(wù)而為上層提供統(tǒng)一的服務(wù)尊勿,屏蔽本層及以下層的差異,當(dāng)本層及以下層發(fā)生了變化不會(huì)影響到上層畜侦。
也就是說各層各司其職元扔,各層提供固定的功能服務(wù),專業(yè)點(diǎn)可以說是高內(nèi)聚旋膳、低耦合澎语。
當(dāng)然了,如果只是做應(yīng)用開發(fā)验懊,就不需要深入了解Linux Kernel層擅羞。
感謝優(yōu)秀的你跋山涉水看到了這里,不如關(guān)注下讓我們永遠(yuǎn)在一起义图!