基于Android的智能手機(jī)開發(fā)畢業(yè)設(shè)計(jì)

上傳人:沈*** 文檔編號(hào):204687062 上傳時(shí)間:2023-04-27 格式:DOC 頁(yè)數(shù):33 大?。?75.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
基于Android的智能手機(jī)開發(fā)畢業(yè)設(shè)計(jì)_第1頁(yè)
第1頁(yè) / 共33頁(yè)
基于Android的智能手機(jī)開發(fā)畢業(yè)設(shè)計(jì)_第2頁(yè)
第2頁(yè) / 共33頁(yè)
基于Android的智能手機(jī)開發(fā)畢業(yè)設(shè)計(jì)_第3頁(yè)
第3頁(yè) / 共33頁(yè)

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《基于Android的智能手機(jī)開發(fā)畢業(yè)設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《基于Android的智能手機(jī)開發(fā)畢業(yè)設(shè)計(jì)(33頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、 1 緒論 1.1 智能手機(jī)平臺(tái) 智能手機(jī)具有獨(dú)立的操作系統(tǒng),像個(gè)人電腦一樣支持用戶自行安裝軟件、游戲等第三方服務(wù)商提供的程序,并通過(guò)此類程序不斷對(duì)手機(jī)的功能進(jìn)行擴(kuò)充,同時(shí)可通過(guò)移動(dòng)通訊網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)無(wú)線網(wǎng)絡(luò)接入。目前,全球多數(shù)手機(jī)廠商都有智能手機(jī)產(chǎn)品,而芬蘭諾基亞、美國(guó)蘋果、加拿大RIM(黑莓)、美國(guó)摩托羅拉、中國(guó)臺(tái)灣宏達(dá)(htc)更是智能機(jī)中的佼佼者。   智能手機(jī)具有五大特點(diǎn):1. 具備無(wú)線接入互聯(lián)網(wǎng)的能力,即需要支持GSM網(wǎng)絡(luò)下的GPRS或者CDMA網(wǎng)絡(luò)的CDMA 1X或3G網(wǎng)絡(luò)。 2. 具有PDA的功能,包括PIM(個(gè)人信息管理),日程記事,任務(wù)安排,多媒體應(yīng)用,瀏覽網(wǎng)頁(yè)。

2、 3. 具有開放性的操作系統(tǒng),可以安裝更多的應(yīng)用程序,使智能手機(jī)的功能可以得到無(wú)限擴(kuò)展。4. 人性化,可以根據(jù)個(gè)人需要擴(kuò)展機(jī)器功能。5. 功能強(qiáng)大,擴(kuò)展性能強(qiáng),第三方軟件支持多。 1.1.1 Symbian   Symbian(中文名:塞班)是一個(gè)實(shí)時(shí)性、多任務(wù)的純32位操作系統(tǒng),具有功耗低、內(nèi)存占用少等特點(diǎn),非常適合手機(jī)等移動(dòng)設(shè)備使用,經(jīng)過(guò)不斷完善,但是雖然在智能型手機(jī)市場(chǎng)取得了無(wú)比的成功,并長(zhǎng)期居于首位,Symbian S60、Symbian3,UIQ等(尤其是S60)系統(tǒng)近兩年亦遭遇到顯著的發(fā)展瓶頸。最近12個(gè)月歐洲手機(jī)公司諾基亞(Nokia)在智能手機(jī)市場(chǎng)市占率的滑落是不爭(zhēng)的事

3、實(shí)。需要注意的是,并不是所有的Symbian系統(tǒng)都是智能系統(tǒng),比如S40系統(tǒng),就不屬于智能手機(jī)系統(tǒng)。 1.1.2 Android Android ( 中文名:安卓) 是基于Linux平臺(tái)開源手機(jī)操作系統(tǒng)名稱,該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號(hào)稱是首個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件。目前在市場(chǎng)上可謂如日中天,越來(lái)越受到玩家的青睞,倍受摩托羅拉推崇。在Android發(fā)展的過(guò)程中,摩托羅拉付出的是核心代碼,Google付出的是公關(guān)和品牌效應(yīng),當(dāng)然還有它的google app,但是Google掌握了Android Market以及通過(guò)android google a

4、pps獲得的大量用戶。 1.1.3 OS(Tapas)   點(diǎn)心操作系統(tǒng)(Tapas OS)是一款基于Android操作平臺(tái)、針對(duì)中國(guó)用戶使用習(xí)慣打造的互聯(lián)網(wǎng)智能手機(jī)操作系統(tǒng),在底層技術(shù)架構(gòu)優(yōu)化的基礎(chǔ)上,為用戶提供流暢的操作體驗(yàn);同時(shí)根據(jù)本土化需求,提供貼心的功能設(shè)計(jì)及豐富的移動(dòng)互聯(lián)網(wǎng)應(yīng)用。點(diǎn)心操作系統(tǒng)由北京風(fēng)靈創(chuàng)景科技有限公司開發(fā)。該公司是李開復(fù)博士旗下的創(chuàng)新工場(chǎng)投資孵化的第一家公司。此外,點(diǎn)心還推出“均衡云計(jì)算”理念,整合網(wǎng)絡(luò)環(huán)境、終端設(shè)備等負(fù)責(zé)狀況,智能分配手機(jī)端及云端計(jì)算量、管理流量分配,為用戶提供安全貼心的云計(jì)算服務(wù)。 1.1.4 Windows Mobile   作為

5、軟件巨頭微軟的掌上版本操作系統(tǒng),在與桌面PC和Office辦公的兼容性方面具有先天的優(yōu)勢(shì),而且WM具有強(qiáng)大的多媒體性能,辦公娛樂(lè)兩不誤,讓他成為最有潛力的操作系統(tǒng)之一。以商務(wù)用機(jī)為主,目前市場(chǎng)已顯出頹勢(shì),最新版本為Windows Phone 7,幾乎對(duì)舊有的WM系統(tǒng)全盤推翻再造,其應(yīng)用機(jī)型已逐漸上市,不過(guò)價(jià)格不菲。 1.1.5 iOS   ios是(又稱MAC OS)由蘋果公司為iPhone開發(fā)的操作系統(tǒng),它主要是給iPhone、iPod touch以及iPad使用。最新版本為iOS4.3.2,該系統(tǒng)的UI設(shè)計(jì)及人機(jī)操作前所未有的優(yōu)秀,軟件極其豐富。蘋果完美的工業(yè)設(shè)計(jì)配以iOS系統(tǒng)的

6、優(yōu)秀操作感受,就靠?jī)H有的幾款機(jī)型,已經(jīng)贏得可觀的市場(chǎng)份額。 1.1.6 MeeGo   MeeGo是諾基亞和英特爾宣布推出一個(gè)免費(fèi)手機(jī)操作系統(tǒng),中文昵稱米狗,該操作系統(tǒng)可在智能手機(jī)、筆記本電腦和電視等多種電子設(shè)備上運(yùn)行,并有助于這些設(shè)備實(shí)現(xiàn)無(wú)縫集成。這種基于Linux的平臺(tái)被稱為MeeGo,融合了諾基亞的Maemo和英特爾的Moblin平臺(tái)。 1.1.7 Web OS   Web OS(又稱Palm os)以其獨(dú)特的外形,另類的系統(tǒng)吸引了無(wú)數(shù)人的眼球,但是一個(gè)問(wèn)題,就是目前沒有任何正規(guī)途徑,還有應(yīng)用軟件的問(wèn)題,配套太少。Web OS系統(tǒng)目前仍有很多的計(jì)算機(jī)編程愛好者,在努力的專

7、研。目前也Palm公司被惠普收購(gòu)。希望其在主流系統(tǒng)云集的將來(lái),不被隕歿! 1.1.8 BlackBerry OS   BlackBerry OS是RIM公司獨(dú)立開發(fā)出的與黑莓手機(jī)配套的系統(tǒng),目前在全世界都頗受歡迎,在此系統(tǒng)基礎(chǔ)上,黑莓的手機(jī)更是獨(dú)樹一幟的在智能手機(jī)市場(chǎng)拼搏,目前也已在中國(guó)形成了大筆粉絲。望其開發(fā)的愈來(lái)愈好,道路愈走愈寬! 1.1.9 三星Bada   bada是韓國(guó)三星公司自行開發(fā)的智能手機(jī)平臺(tái),支持豐富功能和用戶體驗(yàn)的軟件應(yīng)用,于2009年11月10日發(fā)布。bada在韓語(yǔ)里是“海洋”的意思。 bada的設(shè)計(jì)目標(biāo)是開創(chuàng)人人能用智能手機(jī)的時(shí)代。它的特點(diǎn)是配置靈活、

8、用戶交互性好、面向服務(wù),非常重視SNS集成和地理位置服務(wù)應(yīng)用。 bada系統(tǒng)由操作系統(tǒng)核心層、設(shè)備層、服務(wù)層和框架層組成。支持設(shè)備應(yīng)用、服務(wù)應(yīng)用和Web與Flash應(yīng)用。 1.2 Android 平臺(tái)介紹 Android從誕生到現(xiàn)在也不過(guò)3年的時(shí)間,但是也就是在這短短的3年內(nèi)Android創(chuàng)造了一個(gè)迅速被人們知曉并追捧的奇跡。2007 年11 月5 日,Google 與其他33 家手機(jī)制造商(包含摩托羅拉、宏達(dá)電、三星、LG)、手機(jī)晶片供應(yīng)商、軟硬體供應(yīng)商、電信業(yè)者所聯(lián)合組成的開放手持裝置聯(lián)盟(Open Handset Alliance),發(fā)布了名為Android的開放手機(jī)軟硬體平臺(tái)。

9、該聯(lián)盟的成員宣布日后都會(huì)在Android平臺(tái)上開發(fā)他們的新的業(yè)務(wù)。不久之后的2008 年9 月24 日,T-Mobile 公司首度公布第一臺(tái)Android 手機(jī)(G1)的細(xì)節(jié),同日Google 也放出了Android SDK 1.0 rc1。這樣Android進(jìn)入了人們的視線。 Android以其特有的開放性優(yōu)勢(shì)越來(lái)越受到人們和智能手機(jī)廠商的關(guān)注。 對(duì)于第三放軟件開發(fā)商來(lái)說(shuō),Android 是一個(gè)真正意義上的開放性移動(dòng)設(shè)備綜合平臺(tái),Android系統(tǒng)是免費(fèi)向開發(fā)人員提供的,這樣就避免了開發(fā)中專利權(quán)的障礙。因此,就能夠?yàn)榈谌杰浖_發(fā)商省下大筆資金。 對(duì)于設(shè)備制造商來(lái)說(shuō),Android是一

10、個(gè)免費(fèi)的平臺(tái)。當(dāng)設(shè)備制造商每制造一臺(tái)手機(jī)時(shí),那些支付給手機(jī)系統(tǒng)制造商的費(fèi)用也省去了,這樣也降低了每臺(tái)手機(jī)的生產(chǎn)費(fèi)用,同時(shí)就降低了手機(jī)的價(jià)格,這樣在市場(chǎng)上也提高了競(jìng)爭(zhēng)力。 對(duì)硬體開發(fā)廠商來(lái)說(shuō),Android也是個(gè)開放的平臺(tái)。使用Android平臺(tái)的廠商可以更具自己的需求以及能力為Android開發(fā)具有該廠商特色的功能,但是這樣的增加完全不用考慮版權(quán)的問(wèn)題。 同時(shí)Android平臺(tái)支持各種先進(jìn)的網(wǎng)絡(luò)、繪圖、3D 處理能力,可以用來(lái)提供更好的使用者體驗(yàn)。 Google Android 系統(tǒng)作為一個(gè)完全開源的操作系統(tǒng),是由操作系統(tǒng)(Linux)、中間件以及核心應(yīng)用程序組成的軟件棧(softwar

11、e stack)。通過(guò) android SDK 提供的 API 以及相應(yīng)的開發(fā)工具, 程序員可以很方便的開發(fā)android平臺(tái)上的應(yīng)用程序。其整個(gè)系統(tǒng)由應(yīng)用程序(Application),應(yīng)用程序框架(Application Framework),應(yīng)用程序庫(kù)(Libraries),Android運(yùn)行庫(kù)(Android Runtime),Linux內(nèi)核(Linux Kernel)五個(gè)部分組成。Android操作系統(tǒng)內(nèi)置了一部分應(yīng)用程序, 包括電子郵件客戶端、SMS程序、日歷、地圖、瀏覽器、通訊錄以及其他的程序,值得一提的是這些所有的程序都是用java編寫的。 因?yàn)閼?yīng)用程序框架使得組件更易于重用

12、,所以開發(fā)者的應(yīng)用程序可以很容易的調(diào)用API函數(shù)實(shí)現(xiàn)我們想要的功能。在遵守應(yīng)用程序框架的安全機(jī)制約束的前提下,開發(fā)者開發(fā)的一個(gè)應(yīng)用程序可以使用其他程序所開發(fā)的功能。雖然Android的應(yīng)用程序是用Java語(yǔ)言開發(fā)的,但是Android給應(yīng)用程序開發(fā)者提供了一系列的 C/C++ 程序庫(kù),通過(guò)Android的一些特殊的設(shè)計(jì),我們開發(fā)者可以使用這些庫(kù),這在后面的敘述中將看到。 現(xiàn)今,Android操作系統(tǒng)已成為許多手機(jī)制造商的寵兒,其中包括HTC、索尼愛立信、Samsung、摩托羅拉以及國(guó)內(nèi)的聯(lián)想、華為、海爾、華禹等。其中值得一提的是摩托羅拉公司,就在2009年11月憑借其一款搭載Android平

13、臺(tái)的Droid手機(jī),兩個(gè)月內(nèi)就突破百萬(wàn)臺(tái),擊敗了蘋果的iPhone 3GS,被《時(shí)代》雜志評(píng)選為“年度最佳科技產(chǎn)品”。因此告別了兩年多的低迷態(tài)勢(shì),走出了泥潭。2 Android的系統(tǒng)研究 2.1 Android構(gòu)架 2.1.1 Android的構(gòu)架綜述 Android是一個(gè)包括操作系統(tǒng),中間件以及一些重要應(yīng)用程序的專門針對(duì)移動(dòng)設(shè)備的層次結(jié)構(gòu)的軟件集[1]。作為一個(gè)層次結(jié)構(gòu)的軟件集,一定有一個(gè)層次的系統(tǒng)構(gòu)架,下圖為Android的構(gòu)架圖: 圖2-1 Android 系統(tǒng)構(gòu)架 從圖2-1中明顯的可以看出該系統(tǒng)從下到上包括Linux內(nèi)核層、Libr

14、aries和運(yùn)行時(shí)環(huán)境層、應(yīng)用程序框架層、應(yīng)用程序?qū)铀膶咏Y(jié)構(gòu)。在Android的最下層的操作系統(tǒng)基于Linux2.6內(nèi)核,往上的中間件包括Libraries和運(yùn)行時(shí)環(huán)境層和應(yīng)用程序框架層兩個(gè)層次,最上層則是應(yīng)用程序?qū)印? 在Android構(gòu)架中,可以很明顯的看到,底層的Linux內(nèi)核則采用的是C語(yǔ)言,libraries采用C或者C++,但是應(yīng)用程序?qū)?、?yīng)用程序框架層和運(yùn)行時(shí)環(huán)境中的Android核心庫(kù)采用Java語(yǔ)言編寫,也就是說(shuō)Android雖然底層用的是C或者C++但是應(yīng)用程序的開發(fā)則用的是Java。Google采用這樣的模式可能是因?yàn)橄鄬?duì)于C或者C++,Java的開發(fā)周期更短的緣故,這樣

15、的話就能在短時(shí)間內(nèi)為Android提供大量的應(yīng)用軟件。我們知道,作為一個(gè)智能手機(jī)平臺(tái),只有擁有了大量的源源不斷的應(yīng)用程序作為支持,才能受人們的歡迎,從而才能占領(lǐng)市場(chǎng)。之前Nokia的s60第三版就是一個(gè)很好的例子,因此Nokia S60v3的系統(tǒng)才被世人所熟知,并且曾經(jīng)在智能手機(jī)行業(yè)占有很大的市場(chǎng)。而另一個(gè)例子就是Linux系統(tǒng),在所有操作系統(tǒng)中,穩(wěn)定性和性能上能夠和Linux抗衡的系統(tǒng)不多吧,但是在智能手機(jī)市場(chǎng)上為什么Linux卻可以說(shuō)是一敗涂地,其原因也和其第三方應(yīng)用少是脫不了關(guān)系的。 2.1.2 內(nèi)核層 Google Android 作為一個(gè)開源的操作系統(tǒng)其內(nèi)核采用了同樣開源的被業(yè)

16、界認(rèn)為是相當(dāng)穩(wěn)定的Linux作為其內(nèi)核,其中Linux內(nèi)核包括以下功能模塊:安全(Security)、存儲(chǔ)器管理(Memory Management)、進(jìn)程管理(Process Management)、網(wǎng)絡(luò)堆棧(Network Stack)、驅(qū)動(dòng)程序模型(Driver Model)等,另外也在給其上層的軟件和下層硬件間建立起一個(gè)抽象層(Abstraction Layer)。同時(shí)Android在Linux 2.6的內(nèi)核上進(jìn)行了一些增加和刪改,使Linux更加適應(yīng)ARM平臺(tái)。 ⑴增加了一個(gè)基于ARM構(gòu)架的GoldFish平臺(tái)作為虛擬機(jī)的虛擬CPU。 ⑵增加了YAFFS2 FLASH系統(tǒng)文件,因

17、此增加了對(duì)NANDFLASH支持。 ⑶增加了Android相關(guān)的驅(qū)動(dòng)。例如Android的IPC(進(jìn)程間通信機(jī)制)binder,使用這個(gè)能使運(yùn)行的進(jìn)程為其他進(jìn)程提供服務(wù);Android的日志系統(tǒng)(Logger)和內(nèi)存控制臺(tái)(Ram_console);同時(shí)Google還重寫了電源管理(Power) ⑷增加了新的共享方式Ashmem(匿名共享內(nèi)存),多個(gè)應(yīng)用程序可以這種方式共享內(nèi)存獲取信息,為進(jìn)程間提供大量共享內(nèi)存,同時(shí)為內(nèi)核提供回收和管理這個(gè)內(nèi)存的機(jī)制。 2.1.3 Android Runtime和函數(shù)庫(kù)層 2.1.3.1 函數(shù)庫(kù) Android 包含一些C/C++庫(kù),Androi

18、d系統(tǒng)中的各種不同組件都能夠使用這些庫(kù)函數(shù)。這些庫(kù)函數(shù)通過(guò)Android 應(yīng)用程序框架為開發(fā)者提供服務(wù)。以下列舉了一些庫(kù)函數(shù)[2]: ①系統(tǒng) C 庫(kù)-一個(gè)專門為Embedded Linux設(shè)備定制的從BSD(Berkeley Software Distribution 伯克利軟件套件)繼承來(lái)的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫(kù)。 ②媒體庫(kù) - 基于 PacketVideo公司的OpenCORE開發(fā)設(shè)計(jì)的。該庫(kù)支持MPEG4, H.264, MP3, AAC, AMR, JPG, PNG多種常用的音頻、視頻格式的回放和錄制,同時(shí)支持靜態(tài)圖像文件。 ③Surface Manager - 對(duì)顯示子系統(tǒng)的管理,并

19、且為多個(gè)應(yīng)用程序提 供了2D和3D圖層的無(wú)縫融合,提供如同類似iPhone的界面管理功能。 ④LibWebCore - 一個(gè)支持Android瀏覽器和一個(gè)可嵌入的web視圖的最新的web瀏覽器引擎。 ⑤3D libraries - 基于OpenGL ES 1.0 APIs實(shí)現(xiàn);該庫(kù)可以使用硬件 3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。 ⑥SQLite - 一個(gè)功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫(kù)引擎,Android中所有應(yīng)用程序都可以調(diào)用它。 ⑦FreeType -位圖(bitmap)和矢量(vector)字體顯示。 ⑧SGL - 底層的2D圖形引擎。 2.1.3.2 And

20、roid Runtime 前面說(shuō)到Android采用Java作為應(yīng)用程序的開發(fā)語(yǔ)言,但是雖然使用的是Java語(yǔ)言,但是Google卻沒使用傳統(tǒng)的Java Runtime來(lái)執(zhí)行應(yīng)用程序而是采用Android自己特有的Android Runtime。從Android 的系統(tǒng)構(gòu)架圖中可以清楚的看到,Android Runtime由Android函數(shù)庫(kù)(Android Libraries)和Dalvik虛擬機(jī)組成[3]。 Android函數(shù)庫(kù)中里包含了大部分Java程序語(yǔ)言所需要調(diào)用的函數(shù)庫(kù),如data structure, network, utilities, file system等,其中很

21、多代碼是源于2005年的Apache Harmony項(xiàng)目。這樣做的話能夠使Android的虛擬機(jī)的類庫(kù)與Java SE的類庫(kù)有非常大的相似性,進(jìn)而提高了Java SE類庫(kù)的兼容性,最大限度的降低了一個(gè)程序員從Java平臺(tái)開發(fā)到Andorid平臺(tái)開發(fā)的難度,這樣就降低了對(duì)Android開發(fā)的準(zhǔn)備時(shí)間以及前期培訓(xùn)的費(fèi)用,從而降低了Android應(yīng)用程序開發(fā)的周期以及開發(fā)費(fèi)用,這樣的話短時(shí)間內(nèi)就能讓Google Android系統(tǒng)能夠擁有大量的可執(zhí)行的應(yīng)用程序。另外,使用Apache Harmony 類庫(kù)還能完全擺脫Sun的束縛而走上完全開源的Java之路,這樣也奉行了Google對(duì)Android完

22、全開源的原則。 我們知道,對(duì)一個(gè)應(yīng)用程序而言,都采用一個(gè)屬于該應(yīng)用程序的進(jìn)程作為執(zhí)行的載體,同樣,對(duì)于Android也是,一個(gè)應(yīng)用程序也是有一個(gè)屬于它的進(jìn)程。之前說(shuō)過(guò)Android采用Java作為開發(fā)語(yǔ)言,在進(jìn)程執(zhí)行時(shí)應(yīng)該會(huì)有一個(gè)Java虛擬機(jī)來(lái)為進(jìn)程提供服務(wù)。在Android構(gòu)架圖中可以看到, 該系統(tǒng)采用的是一個(gè)叫做Dalvik的虛擬機(jī)。在前面的研究中我們了解到Dalvik虛擬機(jī)是一個(gè)Java 虛擬機(jī),但是又和Java虛擬機(jī)有所不同。Dalvik虛擬機(jī)和傳統(tǒng)的Java虛擬機(jī)所不同之處的是傳統(tǒng)的Java虛擬機(jī)是一個(gè)虛擬機(jī)來(lái)為不同應(yīng)用程序提供服務(wù),而Google自己開發(fā)的Dalvik虛擬機(jī)則是

23、每一個(gè)Android應(yīng)用程序都擁有一個(gè)其自身的Dalvik虛擬機(jī),換句話說(shuō)就是專屬于每一個(gè)應(yīng)用程序?qū)?yīng)著一個(gè)Dalvik虛擬機(jī)而這個(gè)Dalvik虛擬機(jī)相當(dāng)于一個(gè)執(zhí)行個(gè)體。有關(guān)Dalvik虛擬機(jī)的內(nèi)容將在下一個(gè)部分詳細(xì)說(shuō)明。 Android函數(shù)庫(kù)和Dalvik虛擬機(jī)組成了Android的運(yùn)行時(shí)環(huán)境。從圖中可以看到,Android Runtime和Libraries在同一層,建立在Linux Kernel 層之上,與Linux Kernel 沒有交集,而是直接嵌套到libraries中。我們之前說(shuō)過(guò),我們開發(fā)者可以調(diào)用C和C++的一些類庫(kù)。其實(shí)就是這樣Android Runtime與Librar

24、ies在同一層的設(shè)計(jì)并同時(shí)讓Android Runtime 中的Android Libraries 引用libraries中的函數(shù),而通過(guò)Dalvik虛擬機(jī)編譯以后再調(diào)用這些函數(shù)做到上面所述的功能。 也就是說(shuō)其實(shí)Android Libraries中的函數(shù)只是libraries中的一些引用,當(dāng)一個(gè)上層的應(yīng)用程序調(diào)用Dalvik虛擬機(jī)中的核心庫(kù)函數(shù)時(shí),調(diào)用的其實(shí)只是一個(gè)函數(shù)名,并不是函數(shù)的具體實(shí)現(xiàn),然后Dalvik虛擬機(jī)對(duì)該函數(shù)進(jìn)行一些處理以后再通過(guò)Dalvik虛擬機(jī)調(diào)用libraries中的相應(yīng)函數(shù),使之運(yùn)行。換句話說(shuō)就是,Android Libraries中的只是一個(gè)函數(shù)名,而真正代碼的實(shí)現(xiàn)

25、是libraries中的C或者C++代碼。這樣的好處就在于那些使用Java語(yǔ)言很難實(shí)現(xiàn)但是在C或者C++卻能很容易實(shí)現(xiàn)的功能也能通過(guò)Java很容易等的實(shí)現(xiàn)。 應(yīng)用程序進(jìn)程 調(diào)用Runtime中Android函數(shù)庫(kù)函數(shù) Android Libraries Android Runtime Dalvik虛擬機(jī) 交給Dalvik虛擬機(jī)進(jìn)行處理 Libraries Dalvik虛擬機(jī)調(diào)用Libraries中相應(yīng)函數(shù) 圖2-2 應(yīng)用程序調(diào)用Android Libraries中函數(shù)的過(guò)程 2.1.4 Dalvik 虛擬機(jī) Dalvik虛擬機(jī)是Android Runtime的

26、一個(gè)組成部分,之所以要把他拿出來(lái)單獨(dú)進(jìn)行研究是因?yàn)?,Dalvik虛擬機(jī)作為一個(gè)Java虛擬機(jī),但它和普通的Java虛擬機(jī)有著一些不同。Google的工程師結(jié)合傳統(tǒng)的Java 虛擬機(jī),根據(jù)Android使用的平臺(tái)一般為移動(dòng)終端設(shè)備這樣一個(gè)特點(diǎn)重新設(shè)計(jì)的虛擬機(jī),這個(gè)虛擬機(jī)在移動(dòng)終端設(shè)備上運(yùn)行效率上明顯比傳統(tǒng)的Java 虛擬機(jī)要高許多。Dalvik虛擬機(jī)對(duì)內(nèi)存的高效使用和在低速的CPU上表現(xiàn)出的高性能,確實(shí)讓人們刮目相看。 Android的上層應(yīng)用程序雖然是用Java開發(fā)的,但是Dalvik虛擬機(jī)卻和傳統(tǒng)的Java虛擬機(jī)有著很大的區(qū)別,兩者是不兼容的。 首先,眾所周知在Java 中,所有的程序代

27、碼會(huì)被編譯器編譯成字節(jié)碼(.class)文件,然后再打包成JAR文件,在執(zhí)行時(shí)Java虛擬機(jī)就從JAR文件中提取出相應(yīng)的字節(jié)碼文件來(lái)執(zhí)行。在Android中不再使用字節(jié)碼文件而是一種Android所特有的DEX(Dalvik EXecutable)文件。DEX文件的生成還是需要經(jīng)過(guò)生成字節(jié)碼文件的這個(gè)過(guò)程的。使用Java語(yǔ)言編寫好的Android程序代碼,同樣是先用Java編譯器編譯成為字節(jié)碼文件,但是在這之后還需通過(guò)Google提供的一個(gè)DX工具將編譯好的字節(jié)碼轉(zhuǎn)換成為DEX文件,然后Dalvik虛擬機(jī)通過(guò)DEX文件獲得執(zhí)行的代碼。 Google棄用字節(jié)碼文件而采用特有的DEX文件格式,

28、這表明在Android實(shí)際運(yùn)行中DEX文件格式相對(duì)于字節(jié)碼文件格式應(yīng)該有一些獨(dú)特的優(yōu)勢(shì)。在Java中當(dāng)一個(gè)應(yīng)用程序定義了多個(gè)類后,通過(guò)編譯則會(huì)產(chǎn)生相應(yīng)數(shù)目的class字節(jié)碼文件,在這些字節(jié)碼文件中則必然會(huì)有冗余信息,例如一些相同的類庫(kù)會(huì)冗余等。而DEX文件格式則是把這些class字節(jié)碼文件整合到一個(gè)DEX文件中,使得字節(jié)碼中的冗余減少了,同時(shí)使整體文件的尺寸也減少了。這樣一來(lái),對(duì)于同一個(gè)應(yīng)用程序來(lái)說(shuō),相對(duì)于Java的字節(jié)碼文件Android的DEX文件格式在I/O操作中所需要的時(shí)間也減少了,同時(shí)也減少了查找類所需要的時(shí)間。另外DEX使用等長(zhǎng)的指令,這樣的話能夠使得DEX文件盡量的簡(jiǎn)潔,從而提高

29、了解析速度。通過(guò)上面的研究可以看出DEX文件格式是一種專為Dalvik虛擬機(jī)設(shè)計(jì)的壓縮格式,該格式的高性能很適合內(nèi)存和處理器速度有限的平臺(tái),從中可以看出Android是定位于嵌入式平臺(tái)的一個(gè)操作系統(tǒng)。在這也體現(xiàn)出了Google給Android所定義的發(fā)展以及戰(zhàn)略方向,如今移動(dòng)平臺(tái)的網(wǎng)絡(luò)應(yīng)用已經(jīng)成為當(dāng)前移動(dòng)終端設(shè)備的發(fā)展方向,作為網(wǎng)絡(luò)搜索的龍頭大哥,Android就是其打入該移動(dòng)平臺(tái)網(wǎng)絡(luò)應(yīng)用的利器。 Android應(yīng)用開發(fā)和Dalvik虛擬機(jī)同樣都使用Java開發(fā)語(yǔ)言,在應(yīng)用程序開發(fā)好以后我們就需要將這個(gè)應(yīng)用發(fā)布到Android移動(dòng)終端設(shè)備。我們把一個(gè)開發(fā)好的應(yīng)用的Java代碼經(jīng)過(guò)編譯以后生

30、成.class的字節(jié)碼文件,通過(guò)Android的DX工具轉(zhuǎn)換成.DEX格式的文件,最后使用Android的appt打包工具把DEX文件,源文件以及AndroidManifest.xml文件組合成一個(gè)APK應(yīng)用程序包,然后就能發(fā)布到移動(dòng)終端設(shè)備上了。在APK應(yīng)用程序程序包發(fā)布到移動(dòng)終端設(shè)備后,應(yīng)用程序運(yùn)行前會(huì)對(duì)其中的DEX文件進(jìn)行優(yōu)化,優(yōu)化后的文件格式稱之為DEY,DEY文件被保存到緩存區(qū)域,虛擬機(jī)會(huì)在緩存中執(zhí)行這些文件。 其次,傳統(tǒng)的Java 虛擬機(jī)是采用的是基于棧的設(shè)計(jì),而Dalvik虛擬機(jī)則是基于寄存器設(shè)計(jì)的。 基于棧設(shè)計(jì)的虛擬機(jī)能夠使指令變得簡(jiǎn)單,不需要考慮程序中的源寄存器和目的寄

31、存器,只需要開辟??臻g而不需要為臨時(shí)變量再開辟一個(gè)存儲(chǔ)空間。另外基于棧設(shè)計(jì)的虛擬機(jī)移植性比基于寄存器設(shè)計(jì)的虛擬機(jī)要高很多,從組成原理和嵌入式操作系統(tǒng)課程中我們知道,一般的32位x86處理器的通用寄存器和32位的ARM的通用寄存器數(shù)目是不同的。虛擬機(jī)的設(shè)計(jì)中,為了執(zhí)行的效率,有時(shí)會(huì)把這些寄存器一一映射到物理寄存器上,但是由于平臺(tái)的不同,導(dǎo)致通用寄存器數(shù)量不同造成如果基于寄存器設(shè)計(jì)的虛擬機(jī)很難做到一一映射,執(zhí)行效率就會(huì)大打折扣。而用基于棧的設(shè)計(jì)的話,就不存在這種問(wèn)題,就很容易的分配寄存器。另外,基于棧設(shè)計(jì)的虛擬機(jī)采用的是零地址指令,這樣的話指令形式比較緊湊。 雖然基于棧結(jié)構(gòu)的虛擬機(jī)有上述的一些優(yōu)

32、點(diǎn),但是為什么Google不采用基于棧的設(shè)計(jì)而采用基于寄存器結(jié)構(gòu)設(shè)計(jì)Dalvik虛擬機(jī)呢。我個(gè)人覺得這是和Android所搭載的平臺(tái)以及Google的戰(zhàn)略有關(guān)的。首先,Android所搭載的主要平臺(tái)為移動(dòng)終端設(shè)備,如今的移動(dòng)終端設(shè)備雖然性能比過(guò)去好多了,但是還是無(wú)法擺脫CPU處理能力低于桌面PC,存儲(chǔ)資源有限的限制,在這樣一個(gè)平臺(tái)上使用基于棧的設(shè)計(jì),在指令執(zhí)行時(shí)必定會(huì)多出一個(gè)進(jìn)棧(PUSH)和出棧(POP)的操作,那一定會(huì)影響指令執(zhí)行的效率,這也是為什么我們?cè)谝恍┦謾C(jī)平臺(tái)上運(yùn)行Java程序時(shí)感到很慢的原因了。其次從Google對(duì)Dalvik虛擬機(jī)設(shè)計(jì)中采用的16個(gè)通用寄存器中可以看出Andro

33、id的發(fā)展方向是基于ARM的硬件平臺(tái),這也和Google的戰(zhàn)略方向相一致。雖然移植性降低了,但是使用二地址和三地址的指令,使得代碼執(zhí)行效率大大提高。另外,Dalvik虛擬機(jī)雖然沒有采用現(xiàn)在流行虛擬機(jī)技術(shù)例如JIT(just in time,及時(shí)編譯)技術(shù),但是Dalvik虛擬機(jī)仍然是一個(gè)具有很高性能的虛擬機(jī),在這不得不說(shuō)一下,Dalvik虛擬機(jī)是一個(gè)設(shè)計(jì)相當(dāng)不錯(cuò)的虛擬機(jī)。從Dalvik虛擬機(jī)的設(shè)計(jì)上我們可以看到Google打算用Android系統(tǒng)來(lái)沖擊手機(jī)移動(dòng)終端設(shè)備,想把其提供的服務(wù)擴(kuò)展到移動(dòng)設(shè)備上的戰(zhàn)略。 另外,Dalvik虛擬機(jī)的設(shè)計(jì)方面也有其獨(dú)特的地方。它就是本著能夠并發(fā)執(zhí)行多個(gè)虛

34、擬機(jī)的設(shè)計(jì)思路來(lái)編寫的。每一個(gè)Dalvik虛擬機(jī)實(shí)例對(duì)應(yīng)于一個(gè)應(yīng)用程序,同時(shí)這個(gè)虛擬機(jī)實(shí)例還都是一個(gè)進(jìn)程空間。換句話說(shuō)就是一個(gè)應(yīng)用對(duì)應(yīng)一個(gè)Dalvik虛擬機(jī)同時(shí)對(duì)應(yīng)一個(gè)進(jìn)程空間。不同的應(yīng)用程序在不同的Dalvik虛擬機(jī)實(shí)例中運(yùn)行,不同的Dalvik虛擬機(jī)又對(duì)應(yīng)于不同的進(jìn)程空間,加之不同的應(yīng)用程序在Linux內(nèi)核中以不同的Linux用戶來(lái)執(zhí)行,這樣可以最大限度的保證應(yīng)用程度的獨(dú)立性和安全性。但Dalvik虛擬機(jī)要實(shí)現(xiàn)如線程機(jī)制,內(nèi)存的分配和管理等操作的話,仍然需要底層操作系統(tǒng)的支持。另外Dalvik虛擬機(jī)線程機(jī)制中的一個(gè)線程對(duì)應(yīng)于Linux中相應(yīng)的一個(gè)線程,這樣操作系統(tǒng)中的線程就能最大限度的為D

35、alvik虛擬機(jī)服務(wù)。通過(guò)這樣的一個(gè)設(shè)計(jì),Android的安全性大大提高了。 說(shuō)到Dalvik虛擬機(jī),那就應(yīng)該說(shuō)說(shuō)虛擬機(jī)中的一個(gè)特殊的虛擬機(jī)進(jìn)程Zygote,之前說(shuō)過(guò)一個(gè)Dalvik虛擬機(jī)對(duì)應(yīng)一個(gè)進(jìn)程空間。Zygote進(jìn)程的功能有點(diǎn)類似于Linux中的1號(hào)進(jìn)程,在Linux當(dāng)系統(tǒng)啟動(dòng)時(shí)即產(chǎn)生1號(hào)進(jìn)程,而其他的進(jìn)程都由1號(hào)進(jìn)程創(chuàng)建。在Dalvik虛擬機(jī)中Zygote進(jìn)程fork出所有的虛擬機(jī)進(jìn)程,每當(dāng)系統(tǒng)提出執(zhí)行一個(gè)Android應(yīng)用時(shí),需要一個(gè)Dalvik虛擬機(jī)是,Zygote就會(huì)fork出一個(gè)子進(jìn)程來(lái)執(zhí)行該應(yīng)用。使用它可以加快系統(tǒng)的執(zhí)行,因?yàn)閆ygote進(jìn)程在系統(tǒng)啟動(dòng)時(shí)就產(chǎn)生,已經(jīng)完成了

36、虛擬機(jī)的初始化,預(yù)置類庫(kù)的加載和初始化等等操作。當(dāng)我們要執(zhí)行一個(gè)應(yīng)用而建立一個(gè)虛擬機(jī)時(shí),只需讓Zygote進(jìn)程自身復(fù)制,這樣就可以減少虛擬機(jī)初始化等操作的時(shí)間。另外,對(duì)于一些只讀庫(kù)所有虛擬機(jī)實(shí)例都和Zygote進(jìn)程共享一塊內(nèi)存區(qū),這樣大大減少了對(duì)內(nèi)存的開銷。 2.1.5 Android的進(jìn)程管理機(jī)制 Android雖然是基于Linux,但是它卻采用了一種有別于Linux的一種管理機(jī)制。Linux在一個(gè)進(jìn)程活動(dòng)停止后就立刻結(jié)束該進(jìn)程,而Android在一個(gè)進(jìn)程活動(dòng)停止后不會(huì)立刻結(jié)束該進(jìn)程,并使該進(jìn)程常駐內(nèi)存中。直到系統(tǒng)資源不夠需要更多內(nèi)存或者當(dāng)某個(gè)結(jié)束進(jìn)程的事件發(fā)生時(shí)才將該進(jìn)程結(jié)束。

37、 在Android中進(jìn)程被分成了前臺(tái)進(jìn)程(foreground)、可見進(jìn)程(visible)、次要服務(wù)(secondary server)、后臺(tái)進(jìn)程(hidden)、內(nèi)容供應(yīng)節(jié)點(diǎn)(content provider)、空進(jìn)程(empty)六種。 ⑴前臺(tái)進(jìn)程是指一些系統(tǒng)進(jìn)程和當(dāng)前屏幕上正在顯示的進(jìn)程。比如說(shuō)你打開Google地圖查找路線,此時(shí)Google地圖就是一個(gè)前臺(tái)進(jìn)程。⑵可見進(jìn)程則是那些雖然不在前臺(tái),但是用戶依然可見的進(jìn)程,如輸入法,時(shí)鐘等,這些進(jìn)程雖然不是在前臺(tái)運(yùn)行的,但是其存在和我們的使用卻是密切相關(guān)的,如果關(guān)閉了這些應(yīng)用程序?qū)⒔o我們的使用帶來(lái)非常大的不便⑶次要服務(wù)是一些與系統(tǒng)功能息

38、息相關(guān)的服務(wù),如Google企業(yè)套件等。⑷后臺(tái)進(jìn)程,可以這么說(shuō)后臺(tái)進(jìn)程就是一個(gè)前臺(tái)進(jìn)程被另一個(gè)前臺(tái)進(jìn)程替換后,進(jìn)程沒有結(jié)束,但是已經(jīng)不再是前臺(tái)進(jìn)程的一個(gè)狀態(tài)。在實(shí)際應(yīng)用中就是當(dāng)一個(gè)前臺(tái)進(jìn)程運(yùn)行時(shí)按HOME鍵后的進(jìn)程狀態(tài)⑸內(nèi)容供應(yīng)節(jié)點(diǎn)是沒有程序?qū)嶓w,而是僅僅提供內(nèi)容給別的程序使用的比如說(shuō)日歷節(jié)點(diǎn)⑹空進(jìn)程是沒有任何東西在運(yùn)行的進(jìn)程,在一個(gè)程序退出后會(huì)有一個(gè)沒有任何數(shù)據(jù)和代碼在運(yùn)行但是依然駐留在進(jìn)程空間中的進(jìn)程,該進(jìn)程僅僅是作為一個(gè)能夠提高該程序下次啟動(dòng)速度和記錄程序歷史記錄的進(jìn)程。 Android在調(diào)度以上幾種進(jìn)程時(shí)使用了一個(gè)系統(tǒng)值作為系統(tǒng)對(duì)進(jìn)程的一個(gè)評(píng)估,當(dāng)要結(jié)束一個(gè)進(jìn)程時(shí)該值的數(shù)值越大的進(jìn)

39、程被系統(tǒng)選中并結(jié)束的概率越大。一般的,前臺(tái)進(jìn)程的值為0,這表明前臺(tái)進(jìn)程不可能被系統(tǒng)選中并結(jié)束。當(dāng)進(jìn)程進(jìn)入后臺(tái)以后,系統(tǒng)將會(huì)分配一個(gè)更高的值給該進(jìn)程。相對(duì)于Linux的最近最早未使用的調(diào)度策略,Android在其基礎(chǔ)上提供了一套獨(dú)特的進(jìn)程管理模塊,他能讓程序員使用腳本來(lái)對(duì)內(nèi)存管理進(jìn)行定制。比如當(dāng)內(nèi)存小于某個(gè)值時(shí)可以結(jié)束這個(gè)系統(tǒng)值大于另外一個(gè)值的進(jìn)程,還可以當(dāng)內(nèi)存小某個(gè)值時(shí)結(jié)束上面六類進(jìn)程中的一類(但順序必須是空進(jìn)程,內(nèi)容供應(yīng)節(jié)點(diǎn),后臺(tái)進(jìn)程,次要服務(wù),可見進(jìn)程,最后才是前臺(tái)進(jìn)程)。根據(jù)這種特性 該系統(tǒng)值至少由兩部分組成,一個(gè)是基值,另一個(gè)根據(jù)LRU(最近最久未使用)調(diào)度算法產(chǎn)生的一個(gè)值。對(duì)于以上說(shuō)

40、的六種進(jìn)程應(yīng)該分別有一系統(tǒng)給其賦予的值,其大小順序應(yīng)該是空進(jìn)程大于內(nèi)容供應(yīng)節(jié)點(diǎn)大于后臺(tái)進(jìn)程大于次要服務(wù)大于可見進(jìn)程大于前臺(tái)進(jìn)程,而這個(gè)系統(tǒng)賦予的值則是基值。這樣就能保證一些這六種進(jìn)程總是當(dāng)一種進(jìn)程被結(jié)束完了以后另外一種進(jìn)程才會(huì)被結(jié)束,同時(shí)只需要根據(jù)這個(gè)系統(tǒng)值就能輕易做到對(duì)內(nèi)存管理的定制。 2.1.6 應(yīng)用程序框架層 在Android系統(tǒng)構(gòu)架圖中可以看到,應(yīng)用程序框架層是處于Android Runtime和庫(kù)函數(shù)層于應(yīng)用程序?qū)又g,之前的敘述中知道,該層使用開發(fā)語(yǔ)言的是Java語(yǔ)言。應(yīng)用程序框架是能夠讓開發(fā)者完全訪問(wèn)核心應(yīng)用程序所使用的API(Application Programmin

41、g Interface,應(yīng)用程序編程接口),該框架能夠讓組件軟件重用的工做簡(jiǎn)單化。同時(shí)該框架中的任何一個(gè)功能模塊都是等價(jià)的,任何一個(gè)應(yīng)用程序都可以發(fā)布其功能模塊,該功能模塊可以替代當(dāng)前的任意一個(gè)功能模塊,但前提是必須遵循框架的安全限制[4],另外,其他的任意應(yīng)用程序能夠使用這個(gè)發(fā)布的功能模塊。這樣的設(shè)計(jì)就使Android的構(gòu)件重用率提高了。 在每一個(gè)應(yīng)用程序背后,應(yīng)用程序框架為其提供了一系列的服務(wù)。這些服務(wù)包括:①一個(gè)豐富并且可擴(kuò)展的視圖,通過(guò)這個(gè)視圖我們可以使用它提供的一些包括按鈕、文本框、列表、網(wǎng)格等甚至可嵌入的web瀏覽器的應(yīng)用程序來(lái)構(gòu)造我們的應(yīng)用程序。②內(nèi)容提供器(content

42、providers),有了內(nèi)容提供器,一個(gè)應(yīng)用程序可以共享它自己的數(shù)據(jù)或者訪問(wèn)另外一個(gè)應(yīng)用程序中共享的數(shù)據(jù)。③資源管理器(resource manager),使用資源管理器,我們?cè)趹?yīng)用程序中能夠訪問(wèn)到一些如圖形、布局文件等一些非代碼資源。④通知管理器(notification manager),給程序員提供了一個(gè)可以在程序狀態(tài)欄中顯示自定義提示信息的管理器。⑤活動(dòng)管理器(activity manager),提供常用導(dǎo)航功能用來(lái)管理應(yīng)用程序生命周期的服務(wù)。通過(guò)這些應(yīng)用程序框架層提供的服務(wù)程序員能夠方便的開發(fā)一個(gè)界面優(yōu)秀功能強(qiáng)大易于共享的的應(yīng)用程序。 2.1.7 應(yīng)用程序?qū)? 回到Andro

43、id系統(tǒng)構(gòu)架圖中,應(yīng)用程序?qū)影巳缑芾怼oogle maps、瀏覽器等本地應(yīng)用程序(native apps),如QQ、MSN、QuickOffice等第三方應(yīng)用程序(third part apps),以及developer apps。同樣,該層的應(yīng)用程序也都使用Java語(yǔ)言進(jìn)行開發(fā)的。 2.2 Android的應(yīng)用 2.2.1 Android應(yīng)用的組成 任何一個(gè)Android應(yīng)用程序,都可由四個(gè)部分組成,這四個(gè)組成部分分別是①Activity;②Intent Receiver;③Service;④Content Provider[5]。對(duì)于一個(gè)應(yīng)用程序來(lái)說(shuō),不一定這四個(gè)部

44、分都需要。其中,Activity、Intent Receiver和Service是Android最基本的三個(gè)組件。其實(shí),這四個(gè)部分全部或者其中幾個(gè)的相互協(xié)調(diào)工作組成了我們平時(shí)見到的應(yīng)用程序。 在Android中每個(gè)應(yīng)用程序都需要一個(gè)XML配置文件AndroidManifest.xml,該配置文件用于定義我們的應(yīng)用程序組件和組件的功能以及一些必要條件等。因此當(dāng)我們使用到任何一個(gè)組件時(shí)都需要在這個(gè)配置文件中進(jìn)行登記,否則就算是你在代碼中使用了這個(gè)組件,但是Android系統(tǒng)也是找不到該組件的。 2.2.2 Activity Activity是Android中最最基本的組件,實(shí)際應(yīng)用中,

45、通常就是一個(gè)單獨(dú)的屏[6],也就是一個(gè)運(yùn)行在前臺(tái)程序在某一時(shí)刻在屏幕中所能展示的全部?jī)?nèi)容就是一個(gè)Activity。每一個(gè)Activity都是繼承于Activity基類的一個(gè)子類,并且該Activity類由幾個(gè)之前說(shuō)過(guò)的應(yīng)用程序框架提供的視圖組成用戶接口,實(shí)現(xiàn)對(duì)事件的響應(yīng)。絕大部分的應(yīng)用都會(huì)包含多個(gè)屏幕,例如名片管理的應(yīng)用,一個(gè)屏用于顯示所有的聯(lián)系人,另一個(gè)屏用于顯示其中某個(gè)聯(lián)系人的詳細(xì)信息,可能還會(huì)有用于分組信息或者用于系統(tǒng)設(shè)定的屏。對(duì)于這些,每一個(gè)屏都是一個(gè)Activity。當(dāng)一個(gè)新的Activity執(zhí)行以后,前一個(gè)Activity將暫停,并保存到系統(tǒng)歷史堆棧當(dāng)中,用戶可以返回到歷史堆棧中的

46、上一個(gè)Activity。當(dāng)該Activity不用時(shí)可以從歷史堆棧中刪除。 2.2.3 Intent Receiver Intent Receiver有的地方也叫做Broadcast Receiver。當(dāng)你希望你的應(yīng)用能夠捕獲一個(gè)外部事件并作出響應(yīng)時(shí),比如手機(jī)快沒電了,收到一條新的短信息等。這時(shí)你就可以使用一個(gè)Intent Receiver。因?yàn)镮ntent Receiver只是在一個(gè)你所關(guān)注的事件發(fā)生時(shí),會(huì)給那些關(guān)注該事件的應(yīng)用程序發(fā)送一個(gè)通知,所以它并不會(huì)生成一個(gè)UI。同樣的Intent Receiver也需要在AndroidManifest.xml中進(jìn)行注冊(cè)。當(dāng)一個(gè)你所關(guān)注的時(shí)間發(fā)生

47、時(shí),我們的應(yīng)用不需要主動(dòng)去調(diào)用intent receiver,系統(tǒng)會(huì)在一個(gè)合適的時(shí)候去調(diào)用我們的程序的。 2.2.4 Service Service是一段長(zhǎng)生命周期的,沒有用戶界面的程序。我們舉一個(gè)播放器的例子,來(lái)說(shuō)明Service程序。當(dāng)一個(gè)播放器在前臺(tái)運(yùn)行時(shí)我們會(huì)看到應(yīng)用程序提供的一個(gè)屏,也就是之前說(shuō)的Activity,這個(gè)Activity提供給用戶一些操作播放器如播放、停止、下一曲等操作以及顯示一些歌曲和播放列表信息的功能。但是當(dāng)播放器被切換到后臺(tái)以后,所有的Activity都放到歷史堆棧中了,而這時(shí)播放器任然繼續(xù)進(jìn)行播放,而當(dāng)一首歌曲播放完了以后,還會(huì)根據(jù)播放列表中的信息播放下一

48、首歌曲。完成這些功能的組件就是Service。當(dāng)播放器的Activity利用Context.startService()方法啟動(dòng)一個(gè)Service后,這個(gè)播放器就能夠在后臺(tái)持續(xù)的播放音樂(lè)了。還有,對(duì)于一個(gè)Service組件,我們可以使用Context.bindService()連接到Service上,就能通過(guò)該Service提供的接口與之進(jìn)行通信。 2.2.5 Content Provider Content Provider提供給你的應(yīng)用程序與其他應(yīng)用程序共享數(shù)據(jù)的一個(gè)功能。我們的應(yīng)用程序可以通過(guò)Content Provider提供的一些方法來(lái)處理或者保存其他應(yīng)用程序Content P

49、rovider中的數(shù)據(jù),這樣來(lái)達(dá)到數(shù)據(jù)的共享。 2.2.6 AndroidManifest.xml 之前提到過(guò),每一個(gè)Android應(yīng)用程序都包括了一個(gè)AndroidManifest.xml配置文件,它對(duì)應(yīng)了應(yīng)用程序的說(shuō)明,包括運(yùn)行權(quán)限,組件的注冊(cè)等。其實(shí)AndroidManifest.xml配置文件和使用Visual Studio開發(fā)中的Manifest.xml很相似,但是VS的可視化的界面的緣故,只需進(jìn)行簡(jiǎn)單的設(shè)置,就能自動(dòng)生成該文件,所以不少的VS程序員會(huì)忽略掉該文件的存在。但是在Android應(yīng)用程序開發(fā)中,該文件是不可缺少的。應(yīng)用程序在運(yùn)行前通過(guò)AndroidManifest

50、.xml文件向系統(tǒng)提供一些必要的信息,讓系統(tǒng)知道該應(yīng)用程序應(yīng)該如何配置。 Android應(yīng)用 AndroidManifest.xml Activity Intent Receiver Service Content Provider 圖2-3 AndroidManifest.xml示意圖 先舉一個(gè)AndroidManifest.xml文件的例子然后從該例子中詳細(xì)描述一下這個(gè)配置文件: 01 02

51、. hello" 04 android: versionCode="1" 05 android: versionName="1.0.0"> 06 07 08 09 10

52、 android: name="android.intent.category.LAUNCHER" /> 11 12 13 14 這是一個(gè)簡(jiǎn)單HelloAndroid程序的AndroidManifest.xml配置文件,從這個(gè)配置文件中我們能夠知道,該應(yīng)用僅包含了一個(gè)Activity。下面將對(duì)這個(gè)配置文件做一個(gè)詳細(xì)的描述。 第1行是一般xml文件都有的頭部信息說(shuō)明,其中包括xml的版本和文件編碼方式。 第2行和第14行則是一對(duì)“manifest”標(biāo)簽,每一

53、個(gè)AndroidManifest配置文件中必須有且只有一對(duì)“manifest”標(biāo)簽,所有AndroidManifest中的描述都應(yīng)該包含在這對(duì)標(biāo)簽中。 第3~5行是“manifest”標(biāo)簽的屬性,這個(gè)例子中的 package屬性說(shuō)明應(yīng)用程序的入口在test.hello這個(gè)包下面。而“android:versionCode”和“android:versionName”兩個(gè)可選的屬性則是說(shuō)明應(yīng)用程序的版本號(hào),其中“android:versionName”是面向用戶的版本號(hào),而“android:versionCode”則是開發(fā)者使用的內(nèi)部版本號(hào)。 第6行和第13行是一對(duì)“applicatio

54、n”標(biāo)簽,該標(biāo)簽中定義了所有應(yīng)用程序所使用的Activity、Intent Receiver、Service等。該標(biāo)簽的“android: icon”屬性定義了應(yīng)用程序顯示在Android主界面中的圖標(biāo)而"@drawable/icon"表示該應(yīng)用程序圖標(biāo)的路徑為/res/drawable/icon。 第7行和第12行是一對(duì)“activity”標(biāo)簽。在Android的應(yīng)用程序當(dāng)中所有定義好的的Activity都需要在AndroidManifest.xml中添加一組“activity”標(biāo)簽,不然的話即使你定義了,但是Android應(yīng)用程序也找不到。在上面給出的例子中,僅僅有一組“activit

55、y”標(biāo)簽,這也說(shuō)明了給出的例子的應(yīng)用程序只有一個(gè)Activity。緊接其后的是“activity”標(biāo)簽的屬性,“android: name”屬性表示了Activity所對(duì)應(yīng)的類,上述例子中的類是HelloAndroid類,結(jié)合package的路徑,它表示的是test.hello.HelloAndroid類。另外,在屬性中“android: name”的值可以直接寫為“HelloAndroid”,因?yàn)槠湟呀?jīng)定義到了test.hello包下面了?!癮ndroid:label”則指定了該Activity代號(hào)。 剩下的8~11行是一對(duì)定義了Activity性質(zhì)的“intent-filter”標(biāo)簽以

56、及“intent-filter”包含的另外兩個(gè)標(biāo)簽“action”和“category”標(biāo)簽之所以這幾個(gè)標(biāo)簽一同說(shuō)是因?yàn)椤癷ntent-filter”標(biāo)簽的性質(zhì)是由“action”和“category”標(biāo)簽來(lái)說(shuō)明的。也就是說(shuō)AndroidManifest中上層的標(biāo)簽的性質(zhì)由下層標(biāo)簽來(lái)描述。應(yīng)用程序的組件為了告訴Android該組件能夠相應(yīng)和處理那些Intent請(qǐng)求可以使用一個(gè)或者多個(gè)的“intent-filter”的標(biāo)簽,同時(shí)一個(gè)“intent-filter”標(biāo)簽至少應(yīng)該包含一個(gè)“action”標(biāo)簽。我們?cè)倩氐嚼拥倪@四行代碼中,“action”標(biāo)簽中的“android:name”屬性的值為a

57、ndroid.intent.action.MAIN,表明該Activity是這個(gè)應(yīng)用程序的進(jìn)入點(diǎn),另外,“category”標(biāo)簽中的“android:name”屬性值為android.intent.category.LAUNCHER說(shuō)明了當(dāng)啟動(dòng)了應(yīng)用程序以后,應(yīng)當(dāng)先執(zhí)行這個(gè)Activity。 對(duì)于AndroidManifest.xml配置中還有“receiver”,“service”和“provider”標(biāo)簽,分別對(duì)應(yīng)了剩下的Intent Receiver、Service和Content Provider三個(gè)應(yīng)用的組成部分。同樣,每個(gè)Intent Receiver和Service以及Cont

58、ent Provider都需要到AndroidManifest.xml中進(jìn)行描述后才能找到。 2.3 Android 文件系統(tǒng) 當(dāng)Android系統(tǒng)部署到相應(yīng)的硬件平臺(tái)上以后,和Linux系統(tǒng)一樣,勢(shì)必有一個(gè)系統(tǒng)文件夾,用來(lái)存放一些系統(tǒng)程序和數(shù)據(jù)以及一些用戶數(shù)據(jù)。下面就將介紹一下Android的系統(tǒng)文件夾 2.3.1 系統(tǒng)文件夾分析 ①\system\app:這里存放的程序?yàn)橄到y(tǒng)默認(rèn)的組件自己安裝的引用程序一般不放在該文件夾下。同時(shí)可以看到,該文件夾下的文件都是APK格式的文件。 ②\system\bin:該目錄下都是系統(tǒng)的本地程序,主要為L(zhǎng)inux系統(tǒng)自帶的組件。而從文件夾名

59、字可以看出都是二進(jìn)制代碼程序。這個(gè)文件夾和Linux系統(tǒng)下的\system\bin文件夾沒多大區(qū)別。 ③\system\etc:與Linux系統(tǒng)下的\system\etc文件夾沒有本質(zhì)的區(qū)別,都用于保存系統(tǒng)的配置文件。 ④\system\fonts:從名字上可以看出用于存放字體的文件夾。 ⑤\system\framework:主要存放核心文件,其文件后綴名為jar,可以看出為系統(tǒng)構(gòu)架平臺(tái)。 ⑥\system\lib:用于存放系統(tǒng)底層庫(kù)。 ⑦\(yùn)system\media:存放鈴聲的文件夾 ⑧\system\sounds:用于存放音樂(lè)文件。 ⑨\system\usr:用戶文件夾,如同L

60、inux中的usr文件夾一樣,存放一些用戶信息,包含鍵盤布局,用戶命令,共享和時(shí)間區(qū)域信息文件。 從以上系統(tǒng)文件夾的構(gòu)造中看出,Android的系統(tǒng)文件夾結(jié)構(gòu)繼承了Linux系統(tǒng)的系統(tǒng)文件夾組成,但是又有一些Android獨(dú)特的地方,就是其在Linux系統(tǒng)文件夾的基礎(chǔ)上進(jìn)行了一些刪減,使得該系統(tǒng)文件夾更加精簡(jiǎn),更加一目了然。 2.3.2 系統(tǒng)構(gòu)架與系統(tǒng)文件的對(duì)應(yīng) 在這之前介紹了Android的系統(tǒng)架構(gòu),但是這個(gè)架構(gòu)如何在Android系統(tǒng)中體現(xiàn)呢?下面將介紹一下,同樣從下到上的順序進(jìn)行描述。 Linux內(nèi)核層。Linux內(nèi)核給其上層的軟件和下層硬件間建立起一個(gè)抽象層,其內(nèi)核的組件都存

61、放在\system\bin文件夾下面,如\system\bin\system_server 系統(tǒng)服務(wù)和\system\bin\dbus-daemon 系統(tǒng)BUS總線監(jiān)控以及\system\bin\app_process 系統(tǒng)進(jìn)程等。 Android Runtime和函數(shù)庫(kù)層。其中函數(shù)庫(kù)都放于\system\lib下,如音頻庫(kù)\system\lib\libaudio.so和系統(tǒng)C庫(kù)\system\lib\libc.so。同時(shí)Android Runtime中的Android Libraries也存放在這個(gè)文件夾下,與其相對(duì)應(yīng)的文件為\system\lib\libandroid_runtime.s

62、o。而Dalvik虛擬機(jī)則放于\system\bin文件夾下,它的對(duì)應(yīng)文件為\system\bin\dalvikvm。 應(yīng)用程序框架層。該層的文件一般都存放到\system\framework,如核心庫(kù)\system\framework\core.jar,Android系統(tǒng)應(yīng)用程序框架中的一些主要如Activity Manager,Content Provider等。 應(yīng)用程序?qū)印_@層的本地應(yīng)用文件都存于\system\app文件夾下,如提供短信和彩信功能的\system\app\Mms.apk、提供電話撥號(hào)功能的\system\app\Phone.apk和能夠提供Google服務(wù)的Goo

63、gle程序包\system\app\GoogleApps.apk。但是像MSN第三方軟件保存位置為\data\文件夾下。3 Android的開發(fā) 3.1 Android開發(fā)工具 前面說(shuō)過(guò),Android的上層應(yīng)用程序是用Java語(yǔ)言開發(fā)的,同時(shí)需要基于Dalvik虛擬機(jī),所以Google公司推薦使用主流的Java繼承開發(fā)環(huán)境 Eclipse。有了Eclipse還不夠,因?yàn)槭褂肑ava語(yǔ)言進(jìn)行開發(fā),應(yīng)該有由SUN公司提供的Java SDK(其中包含了JRE:Java Runtime Environment)。另外,Android的應(yīng)用程序開發(fā)還是和Java開發(fā)有一定區(qū)別,所以還需有一個(gè)G

64、oogle提供的Android SDK。有了這三個(gè)軟件就可以開發(fā)Android應(yīng)用程序了。 3.2 Android開發(fā)平臺(tái)的搭建 Android開發(fā)平臺(tái)搭建步驟很簡(jiǎn)單,但是和我們的論文沒多大關(guān)系,所以具體步驟參見附錄1。 當(dāng)平臺(tái)搭建好以后需要?jiǎng)?chuàng)建一個(gè)Android Virtual Device,這一步是很關(guān)鍵的一步,如果不創(chuàng)建這個(gè)AVD的話,在Eclipse中編譯運(yùn)行Android應(yīng)用程序時(shí)就會(huì)提示找不到AVD,從而無(wú)法編譯。在DOS界面下運(yùn)行Android SDK文件夾中tools目錄下的android.bat工具,其命令是android create avd –name avd15r

65、1 – target 2,使用這個(gè)命令之后會(huì)提示是否創(chuàng)建一個(gè)AVD,輸入yes之后會(huì)提示設(shè)置AVD的一些屬性,如內(nèi)存信息等。要說(shuō)明的是name后面的avd15r1是Android Virtual Device的名字,可以自由選取。而我起這個(gè)名字的意義是avd使用1.5r1版本的SDK。 簡(jiǎn)單的幾步就將Android的開發(fā)平臺(tái)搭建好了,雖然我使用的是Windows7操作系統(tǒng),但是方法同樣適用于Windows xp等其他Windows 平臺(tái)。在一個(gè)應(yīng)用程序設(shè)計(jì)好了以后,點(diǎn)擊Eclipse中的run,就可以看到啟動(dòng)了一個(gè)叫做avd15r1的Android模擬器,同時(shí),在模擬器中就能找到你所編寫的應(yīng)

66、用程序。 3.3 系統(tǒng)功能介紹 本系統(tǒng)功能主要有通信錄功能,游戲,文件瀏覽器,視頻播放器。 通信錄功能:模仿手機(jī)中的通信錄功能實(shí)現(xiàn)對(duì)手機(jī)聯(lián)系人的添加,修改,刪除。 游戲:此游戲是一款簡(jiǎn)單的坦克大戰(zhàn)游戲通過(guò)方向鍵控制己方坦克的移動(dòng)方向,確認(rèn)鍵發(fā)射子彈,并記錄消滅敵人的數(shù)量。 文件瀏覽器:通過(guò)此功能可以瀏覽多種格式的文本文件 視頻播放器:此功能可實(shí)現(xiàn)視頻的播放 3.3.1 系統(tǒng)功能模塊圖: 主界面 游戲 視頻播放器 文件瀏覽器 圖 通信錄 3.3.2 功能流程圖 開機(jī)進(jìn)入主界面 點(diǎn)擊主界面功能模塊圖標(biāo) 判斷用戶點(diǎn)擊的圖標(biāo) 通信錄 文件瀏覽器 游戲 視頻播放器 點(diǎn)擊視頻圖標(biāo) 點(diǎn)擊通信錄標(biāo) 點(diǎn)擊游戲標(biāo) 點(diǎn)擊文件瀏覽器圖標(biāo) 3.3.3 功能實(shí)現(xiàn)界面 主界面: 游戲界面: 通信錄界面:

展開閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!

五月丁香婷婷狠狠色,亚洲日韩欧美精品久久久不卡,欧美日韩国产黄片三级,手机在线观看成人国产亚洲