筆者iOS程序猿一枚抡医,和大多數(shù)攻城獅一樣早敬,在某一語(yǔ)言或某一領(lǐng)域做了一段時(shí)間后會(huì)出現(xiàn)技術(shù)增長(zhǎng)的瓶頸,在這個(gè)深度發(fā)展受阻的時(shí)候水孩,不妨以廣度發(fā)展作為新的切入口镰矿,在不同語(yǔ)言的類比之后融匯貫通,可能會(huì)有新的感悟俘种,以下筆者會(huì)以自己的學(xué)習(xí)軌跡為線索秤标,分階段分享學(xué)習(xí)Android的收獲與感悟。
萬(wàn)語(yǔ)千言宙刘,就先從Android的前世今生說(shuō)起吧抛杨!
Android 的來(lái)歷
| |Android由Android公司創(chuàng)造,后被Google收購(gòu)荐类。|
|: ------ : | :-----------------------------------------------------------------------|
| 2007.11 | Google發(fā)布Android 1.0 手機(jī)操作系統(tǒng),市場(chǎng)反應(yīng)冷淡茁帽。|
| 2008.9 | 第一部Android手機(jī)在紐約發(fā)布,Android操作系統(tǒng)逐漸為手機(jī)廠商認(rèn)可潘拨。|
| 2009.9 | Google發(fā)布Android1.5吊输,提供了藍(lán)牙支持,大受開發(fā)者歡迎铁追。|
| 2010.1 | Google在美國(guó)總部發(fā)布首款合作品牌手機(jī)Nexus One.
Android 的框架結(jié)構(gòu)
Android系統(tǒng)的底層建立在Linux系統(tǒng)之上季蚂,該平臺(tái)由 操作系統(tǒng)、中間件琅束、用戶界面 和 應(yīng)用軟件 4層組成扭屁,它采用一種軟件疊層(Software Stack)的方式進(jìn)行構(gòu)建。其使層與層之間相互分離涩禀,明確各層分工分料滥。這種分工方式保證了層與層之間的低耦合,當(dāng)下層的層內(nèi)或?qū)酉掳l(fā)生改變時(shí)艾船,上層應(yīng)用程序無(wú)需任何改變葵腹。
無(wú)圖無(wú)真相
從上圖我們可以看出,Android操作系統(tǒng)的體系結(jié)構(gòu)可分為4層屿岂,由上到下依次是應(yīng)用程序践宴、應(yīng)用程序框架、核心類庫(kù)和Linux內(nèi)核爷怀,其中第三層還包括Android運(yùn)行時(shí)的環(huán)境阻肩。下面分別來(lái)講解各個(gè)部分。
1. 應(yīng)用程序?qū)?/h3>
Android 連同一個(gè)核心應(yīng)用程序包一起發(fā)布霉撵,該應(yīng)用程序包包括E-mail客戶端磺浙、SMS短消息程序洪囤、日歷、地圖撕氧、瀏覽器瘤缩、聯(lián)系人管理程序等。所有的應(yīng)用程序都是用Java編寫的伦泥。
2. 應(yīng)用程序框架
開發(fā)者完全可以訪問核心應(yīng)用程序所使用的API框架剥啤。該應(yīng)用程序框架架構(gòu)用來(lái)簡(jiǎn)化組件軟件的重用,任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其他的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過(guò)得遵循框架的安全性限制)不脯。該應(yīng)用程序重用機(jī)制使得組件可以被用戶替換府怯。
以下所有的應(yīng)用程序都由一系列的服務(wù)和系統(tǒng)組成,包括:
| 應(yīng)用 |功能|
|------ : | :-----------------------------------------------------------------------|
| 一個(gè)可擴(kuò)展的視圖(Views
)| 可以用來(lái)創(chuàng)建應(yīng)用程序防楷,包括列表(lists
)牺丙、網(wǎng)絡(luò)(grids
)、文本框(text boxes
)复局、按鈕(buttons
)冲簿,甚至是一個(gè)可嵌入的Web瀏覽器。|
| 內(nèi)容管理器(Content Providers
) | 使得應(yīng)用程序可以訪問另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫(kù))亿昏,或者共享它們自己的數(shù)據(jù)峦剔。|
| ** 一個(gè)資源管理器(Resource Manager
)** | 提供非代碼資源的訪問,如本地字符串角钩、圖形和分層文件(layout files
)吝沫。|
| 一個(gè)通知管理器(Notification Manager
) | 使得應(yīng)用程序可以在狀態(tài)欄中顯示客戶通知信息。|
| ** 一個(gè)活動(dòng)類管理器(Activity Manager
)** | 用來(lái)管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能递礼。|
3. Android函數(shù)庫(kù)
Android包括一個(gè)被Android系統(tǒng)中各種不同組件所使用的C/C++集庫(kù)惨险。該庫(kù)通過(guò)Android應(yīng)用程序框架為開發(fā)者提供服務(wù)。
以下是一些主要的核心庫(kù):
核心庫(kù) | 功能 |
---|---|
系統(tǒng)C庫(kù) | 一個(gè)從BSD繼承來(lái)的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫(kù)(libc)宰衙,專門為基于Embedded Linux的設(shè)備定制平道。 |
媒體庫(kù) | 基于PacketVideo OpenCORE;該庫(kù)支持錄放供炼,并且可以錄制許多流行的音頻視頻格式一屋,還有靜態(tài)映像文件包括MPEG4、H.264袋哼、MP3冀墨、AAC、JPG涛贯、PNG诽嘉。 |
SurfaceManager | 對(duì)顯示子系統(tǒng)的管理,并且為多個(gè)應(yīng)用程序提供2D和3D圖層的無(wú)縫融合。 |
LibWebCore | 一個(gè)最新的Web瀏覽器引擎虫腋,用來(lái)支持Android瀏覽器和一個(gè)可嵌入的Web視圖骄酗。 |
SGL | 一個(gè)內(nèi)置的2D圖形引擎。 |
3D libraries | 基于OpenGL ES 1.0 APIs實(shí)現(xiàn)悦冀;該庫(kù)可以使用硬件3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速趋翻。 |
FreeType | 位圖(bitmap)和向量(vector)字體顯示。 |
SQLite | 一個(gè)對(duì)于所以應(yīng)用程序可用盒蟆、功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫(kù)引擎踏烙。 |
4. Android運(yùn)行庫(kù)
Android包括了一個(gè)核心庫(kù)历等,該核心庫(kù)提供了Java編程語(yǔ)言核心庫(kù)的大多數(shù)功能讨惩。
每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例寒屯。Dalvik是針對(duì)同時(shí)高效地運(yùn)行多個(gè)VMs實(shí)現(xiàn)的农渊。Dalvik虛擬機(jī)執(zhí)行.dex的Dalvik可執(zhí)行文件患蹂,該格式文件針對(duì)最小內(nèi)存使用做了優(yōu)化。該虛擬機(jī)是基于寄存器的砸紊,所有的類都是經(jīng)由Java匯編器編譯传于,然后通過(guò)SDK中的DX工具轉(zhuǎn)化成.dex格式由虛擬機(jī)執(zhí)行。
Dalvik虛擬機(jī)依賴于Linux的一些功能醉顽,比如線程機(jī)制和底層內(nèi)存管理機(jī)制沼溜。
5. Linux內(nèi)核
Android的核心系統(tǒng)服務(wù)依賴于Linux內(nèi)核,如安全性游添、內(nèi)存管理系草、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型唆涝。Linux內(nèi)核也同時(shí)作為硬件和軟件棧之間的硬件抽象層找都。