2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  畢業(yè)論文(設(shè)計(jì)) </p><p>  題 目 Google Android手機(jī)嵌入式系統(tǒng)的研究與開發(fā) </p><p>  學(xué) 院 </p>

2、<p>  專 業(yè) 數(shù)字媒體技術(shù) </p><p>  學(xué)生姓名 </p><p>  學(xué) 號(hào) 年級(jí) </p><p>  指導(dǎo)教師

3、 </p><p>  Google Android手機(jī)嵌入式系統(tǒng)的研究及開發(fā)</p><p><b>  數(shù)字媒體技術(shù)</b></p><p>  [摘要] 隨著手機(jī)的普及以及手機(jī)應(yīng)用的深入人心,近幾年“智能手機(jī)”成為了人們關(guān)注的話題。在現(xiàn)今這個(gè)智能手機(jī)系統(tǒng)群雄紛爭(zhēng)的時(shí)候,2008年Google推出了一款名為Android的開源智能

4、手機(jī)操作系統(tǒng)。Android憑借其開放性和良好的人機(jī)界面,受到廣大手機(jī)生產(chǎn)商的重視,隨著3G時(shí)代的到來,Android有可能會(huì)改變現(xiàn)在智能手機(jī)市場(chǎng)的格局。Android 是由Linux操作系統(tǒng)、中間件以及核心應(yīng)用程序組成的專門為移動(dòng)終端設(shè)備開發(fā)的層次軟件集。在對(duì)Android學(xué)習(xí)中,主要做了以下的研究:首先,Android系統(tǒng)是一個(gè)層次的軟件集,所以先從層次方面對(duì)Android進(jìn)行系統(tǒng)研究,主要對(duì)其運(yùn)行時(shí)環(huán)境層以及Android應(yīng)用框架

5、層的研究;其次,通過對(duì)Android平臺(tái)上應(yīng)用的開發(fā),更進(jìn)一步了解Android這個(gè)系統(tǒng),在開發(fā)中,尤其注重Android的Intent機(jī)制的使用。</p><p>  [主題詞] Android; Android 內(nèi)核層; Android構(gòu)架;Android應(yīng)用; Android SDK;Android 開發(fā)

6、 </p><p>  The research and development of Google Android embedded system </p><p>  Computer Science</p><p>  Student: Zhang Xiaoy

7、ong Adviser: Xie Xin</p><p>  [Abstract] With the popularity of mobile phones, “smart phone” become the subject of attention. Now days, there are lots of companies who compete in the filed “Smart Phon

8、e System”. In 2008, Google released their opening source smart phone operating system which called Android. Because of opening source and it’s nice UI. More and more mobile phone manufacturers use Android in their phones

9、. With the becoming of 3G,Android may change the field of smart phones. Android compose of Linux kernel, middl</p><p>  [Key Words] Android;Android Kernel;Android Truss; Android Application;Android SDK;Andr

10、oid Development</p><p><b>  目錄</b></p><p><b>  1 緒論1</b></p><p>  1.1智能手機(jī)平臺(tái)1</p><p>  1.2 Android 平臺(tái)介紹2</p><p>  2 Android的系統(tǒng)研究

11、4</p><p>  2.1 Android構(gòu)架4</p><p>  2.1.1 Android的構(gòu)架綜述4</p><p>  2.1.2內(nèi)核層5</p><p>  2.1.3 Android Runtime和函數(shù)庫層5</p><p>  2.1.4 Dalvik 虛擬機(jī)7</p>&

12、lt;p>  2.1.5 Android的進(jìn)程管理機(jī)制10</p><p>  2.1.6 應(yīng)用程序框架層11</p><p>  2.1.7 應(yīng)用程序?qū)?1</p><p>  2.2 Android的應(yīng)用11</p><p>  2.2.1 Android應(yīng)用的組成11</p><p>  2.2.

13、2 Activity12</p><p>  2.2.3 Intent Receiver12</p><p>  2.2.4 Service12</p><p>  2.2.5 Content Provider13</p><p>  2.2.6 AndroidManifest.xml13</p><p> 

14、 2.3 Android 文件系統(tǒng)15</p><p>  2.3.1 系統(tǒng)文件夾分析15</p><p>  2.3.2 系統(tǒng)構(gòu)架與系統(tǒng)文件的對(duì)應(yīng)16</p><p>  3 Android的開發(fā)17</p><p>  3.1 Android開發(fā)工具17</p><p>  3.2 Android開發(fā)平臺(tái)

15、的搭建17</p><p>  3.3簡(jiǎn)單短信功能軟件(miniSMS)的開發(fā)17</p><p>  3.3.1 miniSMS工程建立及分析18</p><p>  3.3.2 AndroidManifest.xml設(shè)計(jì)19</p><p>  3.3.3 UI設(shè)計(jì)20</p><p>  3.3.4 短

16、信發(fā)送功能的實(shí)現(xiàn)22</p><p>  3.3.5短信息的接收功能24</p><p>  3.3.6 虛擬機(jī)中運(yùn)行28</p><p><b>  總結(jié)29</b></p><p><b>  參考文獻(xiàn)30</b></p><p><b>  聲 明

17、31</b></p><p><b>  致 謝32</b></p><p><b>  附錄33</b></p><p><b> ?。?lt;/b></p><p><b>  1 緒論</b></p><p>&

18、lt;b>  1.1智能手機(jī)平臺(tái)</b></p><p>  Android(['ændr?id])是一個(gè)以Linux為基礎(chǔ)的半開源操作系統(tǒng),主要用于行動(dòng)設(shè)備,由Google和開放手持設(shè)備聯(lián)盟開發(fā)與領(lǐng)導(dǎo)。 Android 系統(tǒng)最初由安迪·魯賓(Andy Rubin)制作,最初主要支持手機(jī)。2005年8月17日被Google收購。2007年11月5日,Google與84

19、家硬件制造商、軟件開發(fā)商及電信營(yíng)運(yùn)商組成開放手持設(shè)備聯(lián)盟(Open Handset Alliance)來共同研發(fā)改良Android系統(tǒng)并生產(chǎn)搭載Android的智慧型手機(jī),并逐漸拓展到平板電腦及其他領(lǐng)域上。隨后,Google以Apache免費(fèi)開源許可證的授權(quán)方式,發(fā)布了Android的源代碼。</p><p>  說起手機(jī),沒有一個(gè)人會(huì)感到陌生。近幾年來一個(gè)名詞一直影響著許許多多的手機(jī)用戶,它就是智能手機(jī)。智能手

20、機(jī)憑借其強(qiáng)大的功能吸引住了許多用戶的眼球,因?yàn)橛辛藦V大的用戶基礎(chǔ),智能手機(jī)也風(fēng)靡一時(shí)。說起智能手機(jī),除了他有一顆強(qiáng)大的CPU和其他一些較高配置的硬件外,其真正的智能還要?dú)w功于其不可缺少的智能操作系統(tǒng)。</p><p>  當(dāng)今,智能手機(jī)所搭載的智能手機(jī)操作系統(tǒng)平臺(tái)大致如下:</p><p> ?。?)Symbian OS。搭載在具有廣泛群眾基礎(chǔ)的Nokia手機(jī)上,并以此占據(jù)了智能手機(jī)的半壁

21、江山,其主要的智能平臺(tái)為大部分諾基亞手機(jī)搭載的的S60系列和索尼愛立信手機(jī)搭載的UIQ系列;</p><p> ?。?)Windows Mobile。Microsoft在桌面系統(tǒng)獲得成功之后,覬覦手機(jī)的巨大市場(chǎng)開發(fā)的智能手機(jī)系統(tǒng),因其界面和桌面windows系統(tǒng)較為接近和其強(qiáng)大的微軟后臺(tái),成為國內(nèi)市場(chǎng)占有率緊跟Symbian之后成為國人比較喜歡的操作系統(tǒng);</p><p> ?。?)Mac

22、 OS X(iPhone OS)。蘋果一直都是個(gè)性和時(shí)尚的代名詞,受廣大中高層次手機(jī)用戶的喜歡。iPhone,以其酷炫的UI和獨(dú)特的操作方式,給傳統(tǒng)手機(jī)帶來一場(chǎng)革命,同時(shí)也給Symbian和Windows Mobile帶來巨大沖擊的;</p><p> ?。?)Blackberry。以商務(wù)應(yīng)用為主,在國外尤其是歐美等地,受到商務(wù)人士歡迎的Black Barry占據(jù)了近一半的無線商務(wù)電子郵件業(yè)務(wù)市場(chǎng),就連美國總統(tǒng)奧

23、巴馬也使用該品牌的手機(jī)。但是在國內(nèi)還是受到一些基礎(chǔ)設(shè)施的制約,所以在國內(nèi)市場(chǎng)不是太好;</p><p> ?。?)Palm OS。專門為PDA開發(fā),一度占據(jù)了90%的PDA市場(chǎng)的份額,雖然其并不專門針對(duì)于手機(jī)設(shè)計(jì),但是以其優(yōu)秀性和對(duì)移動(dòng)設(shè)備的支持同樣使其能夠成為一個(gè)優(yōu)秀的手機(jī)操作系統(tǒng)。</p><p> ?。?)Linux。對(duì)于Linux系統(tǒng),想必很多人都不會(huì)太陌生,桌面系統(tǒng)中以其開源的特

24、性,贏得了不少用戶的喜愛。智能手機(jī)平臺(tái)的Linux同樣具有源代碼開放、軟件授權(quán)費(fèi)用低、應(yīng)用開發(fā)人才資源豐富等優(yōu)點(diǎn),便于開發(fā)個(gè)人和行業(yè)應(yīng)用。但是因?yàn)槠淦脚_(tái)上的應(yīng)用少而不被國人所接受。</p><p>  (7)Google Android。自2007年推出,2008年第一部搭載Android系統(tǒng)的G1上市至今不到短短五年時(shí)間,他已被許多人接受并且認(rèn)可及歡迎。</p><p>  雖然如今的智

25、能手機(jī)系統(tǒng)市場(chǎng)仍被Symbian、Windows Mobile的占領(lǐng),但是iPhone的革命以后,以及后起之秀Android的推出,在將來,智能手機(jī)市場(chǎng)將發(fā)生翻天覆地的變化。</p><p>  1.2 Android 平臺(tái)介紹</p><p>  Android從誕生到現(xiàn)在也不過3年的時(shí)間,但是也就是在這短短的3年內(nèi)Android創(chuàng)造了一個(gè)迅速被人們知曉并追捧的奇跡。2007 年11 月

26、5 日,Google 與其他33 家手機(jī)制造商(包含摩托羅拉、宏達(dá)電、三星、LG)、手機(jī)晶片供應(yīng)商、軟硬體供應(yīng)商、電信業(yè)者所聯(lián)合組成的開放手持裝置聯(lián)盟(Open Handset Alliance),發(fā)布了名為Android的開放手機(jī)軟硬體平臺(tái)。該聯(lián)盟的成員宣布日后都會(huì)在Android平臺(tái)上開發(fā)他們的新的業(yè)務(wù)。不久之后的2008 年9 月24 日,T-Mobile 公司首度公布第一臺(tái)Android 手機(jī)(G1)的細(xì)節(jié),同日Google 也

27、放出了Android SDK 1.0 rc1。這樣Android進(jìn)入了人們的視線。</p><p>  Android以其特有的開放性優(yōu)勢(shì)越來越受到人們和智能手機(jī)廠商的關(guān)注。</p><p>  對(duì)于第三放軟件開發(fā)商來說,Android 是一個(gè)真正意義上的開放性移動(dòng)設(shè)備綜合平臺(tái),Android系統(tǒng)是免費(fèi)向開發(fā)人員提供的,這樣就避免了開發(fā)中專利權(quán)的障礙。因此,就能夠?yàn)榈谌杰浖_發(fā)商省下大筆

28、資金。</p><p>  對(duì)于設(shè)備制造商來說,Android是一個(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)力。</p><p>  對(duì)硬體開發(fā)廠商來說,Android也是個(gè)開放的平臺(tái)。使用Android平臺(tái)的廠商可以更具自己的需求以及能力為Android開發(fā)具有該廠商

29、特色的功能,但是這樣的增加完全不用考慮版權(quán)的問題。</p><p>  同時(shí)Android平臺(tái)支持各種先進(jìn)的網(wǎng)絡(luò)、繪圖、3D 處理能力,可以用來提供更好的使用者體驗(yàn)。</p><p>  Google Android 系統(tǒng)作為一個(gè)完全開源的操作系統(tǒng),是由操作系統(tǒng)(Linux)、中間件以及核心應(yīng)用程序組成的軟件棧(software stack)。通過 android SDK 提供的 API

30、以及相應(yīng)的開發(fā)工具, 程序員可以很方便的開發(fā)android平臺(tái)上的應(yīng)用程序。其整個(gè)系統(tǒng)由應(yīng)用程序(Application),應(yīng)用程序框架(Application Framework),應(yīng)用程序庫(Libraries),Android運(yùn)行庫(Android Runtime),Linux內(nèi)核(Linux Kernel)五個(gè)部分組成。Android操作系統(tǒng)內(nèi)置了一部分應(yīng)用程序, 包括電子郵件客戶端、SMS程序、日歷、地圖、瀏覽器、通訊錄以及其

31、他的程序,值得一提的是這些所有的程序都是用java編寫的。</p><p>  因?yàn)閼?yīng)用程序框架使得組件更易于重用,所以開發(fā)者的應(yīng)用程序可以很容易的調(diào)用API函數(shù)實(shí)現(xiàn)我們想要的功能。在遵守應(yīng)用程序框架的安全機(jī)制約束的前提下,開發(fā)者開發(fā)的一個(gè)應(yīng)用程序可以使用其他程序所開發(fā)的功能。雖然Android的應(yīng)用程序是用Java語言開發(fā)的,但是Android給應(yīng)用程序開發(fā)者提供了一系列的 C/C++ 程序庫,通過Androi

32、d的一些特殊的設(shè)計(jì),我們開發(fā)者可以使用這些庫,這在后面的敘述中將看到。</p><p>  現(xiàn)今,Android操作系統(tǒng)已成為許多手機(jī)制造商的寵兒,其中包括HTC、索尼愛立信、Samsung、摩托羅拉以及國內(nèi)的聯(lián)想、華為、海爾、華禹等。其中值得一提的是摩托羅拉公司,就在2009年11月憑借其一款搭載Android平臺(tái)的Droid手機(jī),兩個(gè)月內(nèi)就突破百萬臺(tái),擊敗了蘋果的iPhone 3GS,被《時(shí)代》雜志評(píng)選為“年

33、度最佳科技產(chǎn)品”。因此告別了兩年多的低迷態(tài)勢(shì),走出了泥潭。</p><p>  2 Android的系統(tǒng)研究</p><p>  2.1 Android構(gòu)架</p><p>  2.1.1 Android的構(gòu)架綜述</p><p>  Android是一個(gè)包括操作系統(tǒng),中間件以及一些重要應(yīng)用程序的專門針對(duì)移動(dòng)設(shè)備的層次結(jié)構(gòu)的軟件集[1]。作為

34、一個(gè)層次結(jié)構(gòu)的軟件集,一定有一個(gè)層次的系統(tǒng)構(gòu)架,下圖為Android的構(gòu)架圖:</p><p>  圖2-1 Android 系統(tǒng)構(gòu)架</p><p>  從圖2-1中明顯的可以看出該系統(tǒng)從下到上包括Linux內(nèi)核層、Libraries和運(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)

35、境層和應(yīng)用程序框架層兩個(gè)層次,最上層則是應(yīng)用程序?qū)印?lt;/p><p>  在Android構(gòu)架中,可以很明顯的看到,底層的Linux內(nèi)核則采用的是C語言,libraries采用C或者C++,但是應(yīng)用程序?qū)?、?yīng)用程序框架層和運(yùn)行時(shí)環(huán)境中的Android核心庫采用Java語言編寫,也就是說Android雖然底層用的是C或者C++但是應(yīng)用程序的開發(fā)則用的是Java。Google采用這樣的模式可能是因?yàn)橄鄬?duì)于C或者C++

36、,Java的開發(fā)周期更短的緣故,這樣的話就能在短時(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)不多吧,但是在

37、智能手機(jī)市場(chǎng)上為什么Linux卻可以說是一敗涂地,其原因也和其第三方應(yīng)用少是脫不了關(guān)系的。</p><p><b>  2.1.2內(nèi)核層</b></p><p>  Google Android 作為一個(gè)開源的操作系統(tǒng)其內(nèi)核采用了同樣開源的被業(yè)界認(rèn)為是相當(dāng)穩(wěn)定的Linux作為其內(nèi)核,其中Linux內(nèi)核包括以下功能模塊:安全(Security)、存儲(chǔ)器管理(Memory

38、 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)。</p><p>  ⑴增加了一個(gè)基于ARM構(gòu)架的GoldFish

39、平臺(tái)作為虛擬機(jī)的虛擬CPU。</p><p> ?、圃黾恿薡AFFS2 FLASH系統(tǒng)文件,因此增加了對(duì)NANDFLASH支持。</p><p>  ⑶增加了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還重寫了電源

40、管理(Power)</p><p>  ⑷增加了新的共享方式Ashmem(匿名共享內(nèi)存),多個(gè)應(yīng)用程序可以這種方式共享內(nèi)存獲取信息,為進(jìn)程間提供大量共享內(nèi)存,同時(shí)為內(nèi)核提供回收和管理這個(gè)內(nèi)存的機(jī)制。</p><p>  2.1.3 Android Runtime和函數(shù)庫層</p><p>  2.1.3.1函數(shù)庫</p><p>  Andr

41、oid 包含一些C/C++庫,Android系統(tǒng)中的各種不同組件都能夠使用這些庫函數(shù)。這些庫函數(shù)通過Android 應(yīng)用程序框架為開發(fā)者提供服務(wù)。以下列舉了一些庫函數(shù)[2]:</p><p>  ①系統(tǒng) C 庫-一個(gè)專門為Embedded Linux設(shè)備定制的從BSD(Berkeley Software Distribution 伯克利軟件套件)繼承來的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫。</p><p>

42、 ?、诿襟w庫 - 基于 PacketVideo公司的OpenCORE開發(fā)設(shè)計(jì)的。該庫支持MPEG4, H.264, MP3, AAC, AMR, JPG, PNG多種常用的音頻、視頻格式的回放和錄制,同時(shí)支持靜態(tài)圖像文件。</p><p>  ③Surface Manager - 對(duì)顯示子系統(tǒng)的管理,并且為多個(gè)應(yīng)用程序提 供了2D和3D圖層的無縫融合,提供如同類似iPhone的界面管理功能。</p>

43、<p> ?、躄ibWebCore - 一個(gè)支持Android瀏覽器和一個(gè)可嵌入的web視圖的最新的web瀏覽器引擎。</p><p> ?、?D libraries - 基于OpenGL ES 1.0 APIs實(shí)現(xiàn);該庫可以使用硬件 3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。</p><p> ?、轘QLite - 一個(gè)功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫引擎,Android中

44、所有應(yīng)用程序都可以調(diào)用它。</p><p>  ⑦FreeType -位圖(bitmap)和矢量(vector)字體顯示。</p><p> ?、郤GL - 底層的2D圖形引擎。</p><p>  2.1.3.2 Android Runtime</p><p>  前面說到Android采用Java作為應(yīng)用程序的開發(fā)語言,但是雖然使用的是J

45、ava語言,但是Google卻沒使用傳統(tǒng)的Java Runtime來執(zhí)行應(yīng)用程序而是采用Android自己特有的Android Runtime。從Android 的系統(tǒng)構(gòu)架圖中可以清楚的看到,Android Runtime由Android函數(shù)庫(Android Libraries)和Dalvik虛擬機(jī)組成[3]。</p><p>  Android函數(shù)庫中里包含了大部分Java程序語言所需要調(diào)用的函數(shù)庫,如dat

46、a structure, network, utilities, file system等,其中很多代碼是源于2005年的Apache Harmony項(xiàng)目。這樣做的話能夠使Android的虛擬機(jī)的類庫與Java SE的類庫有非常大的相似性,進(jìn)而提高了Java SE類庫的兼容性,最大限度的降低了一個(gè)程序員從Java平臺(tái)開發(fā)到Andorid平臺(tái)開發(fā)的難度,這樣就降低了對(duì)Android開發(fā)的準(zhǔn)備時(shí)間以及前期培訓(xùn)的費(fèi)用,從而降低了Android

47、應(yīng)用程序開發(fā)的周期以及開發(fā)費(fèi)用,這樣的話短時(shí)間內(nèi)就能讓Google Android系統(tǒng)能夠擁有大量的可執(zhí)行的應(yīng)用程序。另外,使用Apache Harmony 類庫還能完全擺脫Sun的束縛而走上完全開源的Java之路,這樣也奉行了Google對(duì)Android完全開源的原則。</p><p>  我們知道,對(duì)一個(gè)應(yīng)用程序而言,都采用一個(gè)屬于該應(yīng)用程序的進(jìn)程作為執(zhí)行的載體,同樣,對(duì)于Android也是,一個(gè)應(yīng)用程序也是

48、有一個(gè)屬于它的進(jìn)程。之前說過Android采用Java作為開發(fā)語言,在進(jìn)程執(zhí)行時(shí)應(yīng)該會(huì)有一個(gè)Java虛擬機(jī)來為進(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ī)來為不同應(yīng)用程序提供服務(wù),而Google自己開發(fā)的D

49、alvik虛擬機(jī)則是每一個(gè)Android應(yīng)用程序都擁有一個(gè)其自身的Dalvik虛擬機(jī),換句話說就是專屬于每一個(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ì)說明。</p><p>  Android函數(shù)庫和Dalvik虛擬機(jī)組成了Android的運(yùn)行時(shí)環(huán)境。從圖中可以看到,Android Runtime和Libraries在同一層,建

50、立在Linux Kernel 層之上,與Linux Kernel 沒有交集,而是直接嵌套到libraries中。我們之前說過,我們開發(fā)者可以調(diào)用C和C++的一些類庫。其實(shí)就是這樣Android Runtime與Libraries在同一層的設(shè)計(jì)并同時(shí)讓Android Runtime 中的Android Libraries 引用libraries中的函數(shù),而通過Dalvik虛擬機(jī)編譯以后再調(diào)用這些函數(shù)做到上面所述的功能。</p>

51、<p>  也就是說其實(shí)Android Libraries中的函數(shù)只是libraries中的一些引用,當(dāng)一個(gè)上層的應(yīng)用程序調(diào)用Dalvik虛擬機(jī)中的核心庫函數(shù)時(shí),調(diào)用的其實(shí)只是一個(gè)函數(shù)名,并不是函數(shù)的具體實(shí)現(xiàn),然后Dalvik虛擬機(jī)對(duì)該函數(shù)進(jìn)行一些處理以后再通過Dalvik虛擬機(jī)調(diào)用libraries中的相應(yīng)函數(shù),使之運(yùn)行。換句話說就是,Android Libraries中的只是一個(gè)函數(shù)名,而真正代碼的實(shí)現(xiàn)是librari

52、es中的C或者C++代碼。這樣的好處就在于那些使用Java語言很難實(shí)現(xiàn)但是在C或者C++卻能很容易實(shí)現(xiàn)的功能也能通過Java很容易等的實(shí)現(xiàn)。</p><p>  2.1.4 Dalvik 虛擬機(jī)</p><p>  Dalvik虛擬機(jī)是Android Runtime的一個(gè)組成部分,之所以要把他拿出來單獨(dú)進(jìn)行研究是因?yàn)椋珼alvik虛擬機(jī)作為一個(gè)Java虛擬機(jī),但它和普通的Java虛擬機(jī)有著

53、一些不同。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í)讓人們刮目相看。</p><p>  Android的上層應(yīng)用程序雖然是用Java開發(fā)的,但是Dalvik虛擬機(jī)卻和傳統(tǒng)的Java虛擬機(jī)

54、有著很大的區(qū)別,兩者是不兼容的。</p><p>  首先,眾所周知在Java 中,所有的程序代碼會(huì)被編譯器編譯成字節(jié)碼(.class)文件,然后再打包成JAR文件,在執(zhí)行時(shí)Java虛擬機(jī)就從JAR文件中提取出相應(yīng)的字節(jié)碼文件來執(zhí)行。在Android中不再使用字節(jié)碼文件而是一種Android所特有的DEX(Dalvik EXecutable)文件。DEX文件的生成還是需要經(jīng)過生成字節(jié)碼文件的這個(gè)過程的。使用Jav

55、a語言編寫好的Android程序代碼,同樣是先用Java編譯器編譯成為字節(jié)碼文件,但是在這之后還需通過Google提供的一個(gè)DX工具將編譯好的字節(jié)碼轉(zhuǎn)換成為DEX文件,然后Dalvik虛擬機(jī)通過DEX文件獲得執(zhí)行的代碼。</p><p>  Google棄用字節(jié)碼文件而采用特有的DEX文件格式,這表明在Android實(shí)際運(yùn)行中DEX文件格式相對(duì)于字節(jié)碼文件格式應(yīng)該有一些獨(dú)特的優(yōu)勢(shì)。在Java中當(dāng)一個(gè)應(yīng)用程序定義了

56、多個(gè)類后,通過編譯則會(huì)產(chǎn)生相應(yīng)數(shù)目的class字節(jié)碼文件,在這些字節(jié)碼文件中則必然會(huì)有冗余信息,例如一些相同的類庫會(huì)冗余等。而DEX文件格式則是把這些class字節(jié)碼文件整合到一個(gè)DEX文件中,使得字節(jié)碼中的冗余減少了,同時(shí)使整體文件的尺寸也減少了。這樣一來,對(duì)于同一個(gè)應(yīng)用程序來說,相對(duì)于Java的字節(jié)碼文件Android的DEX文件格式在I/O操作中所需要的時(shí)間也減少了,同時(shí)也減少了查找類所需要的時(shí)間。另外DEX使用等長(zhǎng)的指令,這樣的

57、話能夠使得DEX文件盡量的簡(jiǎn)潔,從而提高了解析速度。通過上面的研究可以看出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ò)搜索的龍頭大</p><p>  Andr

58、oid應(yīng)用開發(fā)和Dalvik虛擬機(jī)同樣都使用Java開發(fā)語言,在應(yīng)用程序開發(fā)好以后我們就需要將這個(gè)應(yīng)用發(fā)布到Android移動(dòng)終端設(shè)備。我們把一個(gè)開發(fā)好的應(yīng)用的Java代碼經(jīng)過編譯以后生成.class的字節(jié)碼文件,通過Android的DX工具轉(zhuǎn)換成.DEX格式的文件,最后使用Android的appt打包工具把DEX文件,源文件以及AndroidManifest.xml文件組合成一個(gè)APK應(yīng)用程序包,然后就能發(fā)布到移動(dòng)終端設(shè)備上了。在AP

59、K應(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í)行這些文件。</p><p>  其次,傳統(tǒng)的Java 虛擬機(jī)是采用的是基于棧的設(shè)計(jì),而Dalvik虛擬機(jī)則是基于寄存器設(shè)計(jì)的。</p><p>  基于棧設(shè)計(jì)的虛擬機(jī)能夠使指令變得簡(jiǎn)單,不需要考慮程序中的源寄存器和目的寄存器,只需要

60、開辟??臻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ì)的話,就

61、不存在這種問題,就很容易的分配寄存器。另外,基于棧設(shè)計(jì)的虛擬機(jī)采用的是零地址指令,這樣的話指令形式比較緊湊。</p><p>  雖然基于棧結(jié)構(gòu)的虛擬機(jī)有上述的一些優(yōu)點(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è)備雖然性能比過去好多

62、了,但是還是無法擺脫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è)通用寄存器中可以看出Android的發(fā)展方向是基于ARM的硬件平臺(tái),這也和Google的戰(zhàn)略方向相一致。雖然移植性降低了

63、,但是使用二地址和三地址的指令,使得代碼執(zhí)行效率大大提高。另外,Dalvik虛擬機(jī)雖然沒有采用現(xiàn)在流行虛擬機(jī)技術(shù)例如JIT(just in time,及時(shí)編譯)技術(shù),但是Dalvik虛擬機(jī)仍然是一個(gè)具有很高性能的虛擬機(jī),在這不得不說一下,Dalvik虛擬機(jī)是一個(gè)設(shè)計(jì)相當(dāng)不錯(cuò)</p><p>  另外,Dalvik虛擬機(jī)的設(shè)計(jì)方面也有其獨(dú)特的地方。它就是本著能夠并發(fā)執(zhí)行多個(gè)虛擬機(jī)的設(shè)計(jì)思路來編寫的。每一個(gè)Dalvi

64、k虛擬機(jī)實(shí)例對(duì)應(yīng)于一個(gè)應(yīng)用程序,同時(shí)這個(gè)虛擬機(jī)實(shí)例還都是一個(gè)進(jìn)程空間。換句話說就是一個(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用戶來執(zhí)行,這樣可以最大限度的保證應(yīng)用程度的獨(dú)立性和安全性。但Dalvik虛擬機(jī)要實(shí)現(xiàn)如線程機(jī)制,內(nèi)存的分配和管理等操作的話,仍然需要底層操作系統(tǒng)的

65、支持。另外Dalvik虛擬機(jī)線程機(jī)制中的一個(gè)線程對(duì)應(yīng)于Linux中相應(yīng)的一個(gè)線程,這樣操作系統(tǒng)中的線程就能最大限度的為Dalvik虛擬機(jī)服務(wù)。通過這樣的一個(gè)設(shè)計(jì),Android的安全性大大提高了。</p><p>  說到Dalvik虛擬機(jī),那就應(yīng)該說說虛擬機(jī)中的一個(gè)特殊的虛擬機(jī)進(jìn)程Zygote,之前說過一個(gè)Dalvik虛擬機(jī)對(duì)應(yīng)一個(gè)進(jìn)程空間。Zygote進(jìn)程的功能有點(diǎn)類似于Linux中的1號(hào)進(jìn)程,在Linux當(dāng)

66、系統(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)程來執(zhí)行該應(yīng)用。使用它可以加快系統(tǒng)的執(zhí)行,因?yàn)閆ygote進(jìn)程在系統(tǒng)啟動(dòng)時(shí)就產(chǎn)生,已經(jīng)完成了虛擬機(jī)的初始化,預(yù)置類庫的加載和初始化等等操作。當(dāng)我們要執(zhí)行一個(gè)應(yīng)用而建立一個(gè)虛擬機(jī)時(shí),只需讓Zygote進(jìn)程自身復(fù)制,

67、這樣就可以減少虛擬機(jī)初始化等操作的時(shí)間。另外,對(duì)于一些只讀庫所有虛擬機(jī)實(shí)例都和Zygote進(jìn)程共享一塊內(nèi)存區(qū),這樣大大減少了對(duì)內(nèi)存的開銷。</p><p>  2.1.5 Android的進(jìn)程管理機(jī)制</p><p>  Android雖然是基于Linux,但是它卻采用了一種有別于Linux的一種管理機(jī)制。Linux在一個(gè)進(jìn)程活動(dòng)停止后就立刻結(jié)束該進(jìn)程,而Android在一個(gè)進(jìn)程活動(dòng)停止后

68、不會(huì)立刻結(jié)束該進(jìn)程,并使該進(jìn)程常駐內(nèi)存中。直到系統(tǒng)資源不夠需要更多內(nèi)存或者當(dāng)某個(gè)結(jié)束進(jìn)程的事件發(fā)生時(shí)才將該進(jìn)程結(jié)束。</p><p>  在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)六種。</p><p&g

69、t; ?、徘芭_(tái)進(jìn)程是指一些系統(tǒng)進(jìn)程和當(dāng)前屏幕上正在顯示的進(jìn)程。比如說你打開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我們的使用帶來非常大的不便⑶次要服務(wù)是一些與系統(tǒng)功能息息相關(guān)的服務(wù),如Google企業(yè)套件等。⑷后臺(tái)進(jìn)程,可以這么說后臺(tái)進(jìn)程就是一個(gè)前

70、臺(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)容給別的程序使用的比如說日歷節(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)程。</p><p&g

71、t;  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)程被系統(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)程管理模塊,他能讓程序員使用腳本來對(duì)內(nèi)存管理進(jìn)行定制。比如當(dāng)內(nèi)存小于某個(gè)值時(shí)可以結(jié)束這

72、個(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ì)于以上說的六種進(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)賦予的值則是基值。這樣

73、就能保證一些這六種進(jìn)程總是當(dāng)一種進(jìn)程被結(jié)束完了以后另外一種進(jìn)程才會(huì)被結(jié)束,同時(shí)只需要根據(jù)這個(gè)系統(tǒng)值就能輕易做到對(duì)內(nèi)存管理的定制。</p><p>  2.1.6 應(yīng)用程序框架層</p><p>  在Android系統(tǒng)構(gòu)架圖中可以看到,應(yīng)用程序框架層是處于Android Runtime和庫函數(shù)層于應(yīng)用程序?qū)又g,之前的敘述中知道,該層使用開發(fā)語言的是Java語言。應(yīng)用程序框架是能夠讓開發(fā)者

74、完全訪問核心應(yīng)用程序所使用的API(Application Programming 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)件重用率提高了。</p>

75、;<p>  在每一個(gè)應(yīng)用程序背后,應(yīng)用程序框架為其提供了一系列的服務(wù)。這些服務(wù)包括:①一個(gè)豐富并且可擴(kuò)展的視圖,通過這個(gè)視圖我們可以使用它提供的一些包括按鈕、文本框、列表、網(wǎng)格等甚至可嵌入的web瀏覽器的應(yīng)用程序來構(gòu)造我們的應(yīng)用程序。②內(nèi)容提供器(content providers),有了內(nèi)容提供器,一個(gè)應(yīng)用程序可以共享它自己的數(shù)據(jù)或者訪問另外一個(gè)應(yīng)用程序中共享的數(shù)據(jù)。③資源管理器(resource manager),使

76、用資源管理器,我們?cè)趹?yīng)用程序中能夠訪問到一些如圖形、布局文件等一些非代碼資源。④通知管理器(notification manager),給程序員提供了一個(gè)可以在程序狀態(tài)欄中顯示自定義提示信息的管理器。⑤活動(dòng)管理器(activity manager),提供常用導(dǎo)航功能用來管理應(yīng)用程序生命周期的服務(wù)。通過這些應(yīng)用程序框架層提供的服務(wù)程序員能夠方便的開發(fā)一個(gè)界面優(yōu)秀功能強(qiáng)大易于共享的的應(yīng)用程序。</p><p>  2

77、.1.7 應(yīng)用程序?qū)?lt;/p><p>  回到Android系統(tǒng)構(gòu)架圖中,應(yīng)用程序?qū)影巳缑芾?、Google maps、瀏覽器等本地應(yīng)用程序(native apps),如QQ、MSN、QuickOffice等第三方應(yīng)用程序(third part apps),以及developer apps。同樣,該層的應(yīng)用程序也都使用Java語言進(jìn)行開發(fā)的。</p><p>  2.2 Androi

78、d的應(yīng)用</p><p>  2.2.1 Android應(yīng)用的組成</p><p>  任何一個(gè)Android應(yīng)用程序,都可由四個(gè)部分組成,這四個(gè)組成部分分別是①Activity;②Intent Receiver;③Service;④Content Provider[5]。對(duì)于一個(gè)應(yīng)用程序來說,不一定這四個(gè)部分都需要。其中,Activity、Intent Receiver和Service是

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

80、找不到該組件的。</p><p>  2.2.2 Activity</p><p>  Activity是Android中最最基本的組件,實(shí)際應(yīng)用中,通常就是一個(gè)單獨(dú)的屏[6],也就是一個(gè)運(yùn)行在前臺(tái)程序在某一時(shí)刻在屏幕中所能展示的全部?jī)?nèi)容就是一個(gè)Activity。每一個(gè)Activity都是繼承于Activity基類的一個(gè)子類,并且該Activity類由幾個(gè)之前說過的應(yīng)用程序框架提供的視圖組

81、成用戶接口,實(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)中,用戶可以返回到歷史堆棧中的上一個(gè)Activity。當(dāng)該Activity不用時(shí)可以從歷史堆棧中刪除。</

82、p><p>  2.2.3 Intent Receiver</p><p>  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)用程

83、序發(fā)送一個(gè)通知,所以它并不會(huì)生成一個(gè)UI。同樣的Intent Receiver也需要在AndroidManifest.xml中進(jìn)行注冊(cè)。當(dāng)一個(gè)你所關(guān)注的時(shí)間發(fā)生時(shí),我們的應(yīng)用不需要主動(dòng)去調(diào)用intent receiver,系統(tǒng)會(huì)在一個(gè)合適的時(shí)候去調(diào)用我們的程序的。</p><p>  2.2.4 Service</p><p>  Service是一段長(zhǎng)生命周期的,沒有用戶界面的程序。我們

84、舉一個(gè)播放器的例子,來說明Service程序。當(dāng)一個(gè)播放器在前臺(tái)運(yùn)行時(shí)我們會(huì)看到應(yīng)用程序提供的一個(gè)屏,也就是之前說的Activity,這個(gè)Activity提供給用戶一些操作播放器如播放、停止、下一曲等操作以及顯示一些歌曲和播放列表信息的功能。但是當(dāng)播放器被切換到后臺(tái)以后,所有的Activity都放到歷史堆棧中了,而這時(shí)播放器任然繼續(xù)進(jìn)行播放,而當(dāng)一首歌曲播放完了以后,還會(huì)根據(jù)播放列表中的信息播放下一首歌曲。完成這些功能的組件就是Serv

85、ice。當(dāng)播放器的Activity利用Context.startService()方法啟動(dòng)一個(gè)Service后,這個(gè)播放器就能夠在后臺(tái)持續(xù)的播放音樂了。還有,對(duì)于一個(gè)Service組件,我們可以使用Context.bindService()連接到Service上,就能通過該Service提供的接口與之進(jìn)行通信。</p><p>  2.2.5 Content Provider</p><p&g

86、t;  Content Provider提供給你的應(yīng)用程序與其他應(yīng)用程序共享數(shù)據(jù)的一個(gè)功能。我們的應(yīng)用程序可以通過Content Provider提供的一些方法來處理或者保存其他應(yīng)用程序Content Provider中的數(shù)據(jù),這樣來達(dá)到數(shù)據(jù)的共享。</p><p>  2.2.6 AndroidManifest.xml</p><p>  之前提到過,每一個(gè)Android應(yīng)用程序都包括了

87、一個(gè)AndroidManifest.xml配置文件,它對(duì)應(yīng)了應(yīng)用程序的說明,包括運(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)行前通過AndroidManife

88、st.xml文件向系統(tǒng)提供一些必要的信息,讓系統(tǒng)知道該應(yīng)用程序應(yīng)該如何配置。</p><p>  先舉一個(gè)AndroidManifest.xml文件的例子然后從該例子中詳細(xì)描述一下這個(gè)配置文件:</p><p>  01 <?xml version="1.0" encoding="utf-8"?> </p><p>

89、;  02<manifest xmlns:android="http://schemas.android.com/apk/res/android" </p><p>  03 package="test. hello" </p><p>  04 android: versionCode="1" </p>

90、;<p>  05 android: versionName="1.0.0"> </p><p>  06<application android: icon="@drawable/icon" > </p><p>  07<activity android:name=".HelloAndroid&

91、quot;android:label=" @string/app_name"> </p><p>  08 <intent-filter> </p><p>  09 <action android: name="android.intent.action.MAIN" /> </p><p>  

92、10 <category android: name="android.intent.category.LAUNCHER" /> </p><p>  11 </intent-filter> </p><p>  12 </activity> </p><p>  13 </application>

93、 </p><p>  14 </manifest></p><p>  這是一個(gè)簡(jiǎn)單HelloAndroid程序的AndroidManifest.xml配置文件,從這個(gè)配置文件中我們能夠知道,該應(yīng)用僅包含了一個(gè)Activity。下面將對(duì)這個(gè)配置文件做一個(gè)詳細(xì)的描述。</p><p>  第1行是一般xml文件都有的頭部信息說明,其中包括xml的版本和文

94、件編碼方式。</p><p>  第2行和第14行則是一對(duì)“manifest”標(biāo)簽,每一個(gè)AndroidManifest配置文件中必須有且只有一對(duì)“manifest”標(biāo)簽,所有AndroidManifest中的描述都應(yīng)該包含在這對(duì)標(biāo)簽中。</p><p>  第3~5行是“manifest”標(biāo)簽的屬性,這個(gè)例子中的 package屬性說明應(yīng)用程序的入口在test.hello這個(gè)包下面。而“

95、android:versionCode”和“android:versionName”兩個(gè)可選的屬性則是說明應(yīng)用程序的版本號(hào),其中“android:versionName”是面向用戶的版本號(hào),而“android:versionCode”則是開發(fā)者使用的內(nèi)部版本號(hào)。</p><p>  第6行和第13行是一對(duì)“application”標(biāo)簽,該標(biāo)簽中定義了所有應(yīng)用程序所使用的Activity、Intent Receiv

96、er、Service等。該標(biāo)簽的“android: icon”屬性定義了應(yīng)用程序顯示在Android主界面中的圖標(biāo)而"@drawable/icon"表示該應(yīng)用程序圖標(biāo)的路徑為/res/drawable/icon。</p><p>  第7行和第12行是一對(duì)“activity”標(biāo)簽。在Android的應(yīng)用程序當(dāng)中所有定義好的的Activity都需要在AndroidManifest.xml中添加一

97、組“activity”標(biāo)簽,不然的話即使你定義了,但是Android應(yīng)用程序也找不到。在上面給出的例子中,僅僅有一組“activity”標(biāo)簽,這也說明了給出的例子的應(yīng)用程序只有一個(gè)Activity。緊接其后的是“activity”標(biāo)簽的屬性,“android: name”屬性表示了Activity所對(duì)應(yīng)的類,上述例子中的類是HelloAndroid類,結(jié)合package的路徑,它表示的是test.hello.HelloAndroid類。

98、另外,在屬性中“android: name”的值可以直接寫為“HelloAndroid”,因?yàn)槠湟呀?jīng)定義到了test.hello包下面了?!癮ndroid:label”則指定了該Activity代號(hào)。</p><p>  剩下的8~11行是一對(duì)定義了Activity性質(zhì)的“intent-filter”標(biāo)簽以及“intent-filter”包含的另外兩個(gè)標(biāo)簽“action”和“category”標(biāo)簽之所以這幾個(gè)標(biāo)簽

99、一同說是因?yàn)椤癷ntent-filter”標(biāo)簽的性質(zhì)是由“action”和“category”標(biāo)簽來說明的。也就是說AndroidManifest中上層的標(biāo)簽的性質(zhì)由下層標(biāo)簽來描述。應(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è)倩氐嚼拥倪@四行代碼中,“actio

100、n”標(biāo)簽中的“android:name”屬性的值為android.intent.action.MAIN,表明該Activity是這個(gè)應(yīng)用程序的進(jìn)入點(diǎn),另外,“category”標(biāo)簽中的“android:name”屬性值為android.intent.category.LAUNCHER說明了當(dāng)啟動(dòng)了應(yīng)用程序以后,應(yīng)當(dāng)先執(zhí)行這個(gè)Activity。</p><p>  對(duì)于AndroidManifest.xml配置中還

101、有“receiver”,“service”和“provider”標(biāo)簽,分別對(duì)應(yīng)了剩下的Intent Receiver、Service和Content Provider三個(gè)應(yīng)用的組成部分。同樣,每個(gè)Intent Receiver和Service以及Content Provider都需要到AndroidManifest.xml中進(jìn)行描述后才能找到。</p><p>  2.3 Android 文件系統(tǒng)</p&g

102、t;<p>  當(dāng)Android系統(tǒng)部署到相應(yīng)的硬件平臺(tái)上以后,和Linux系統(tǒng)一樣,勢(shì)必有一個(gè)系統(tǒng)文件夾,用來存放一些系統(tǒng)程序和數(shù)據(jù)以及一些用戶數(shù)據(jù)。下面就將介紹一下Android的系統(tǒng)文件夾</p><p>  2.3.1 系統(tǒng)文件夾分析</p><p> ?、賊system\app:這里存放的程序?yàn)橄到y(tǒng)默認(rèn)的組件自己安裝的引用程序一般不放在該文件夾下。同時(shí)可以看到,該文

103、件夾下的文件都是APK格式的文件。</p><p> ?、赲system\bin:該目錄下都是系統(tǒng)的本地程序,主要為L(zhǎng)inux系統(tǒng)自帶的組件。而從文件夾名字可以看出都是二進(jìn)制代碼程序。這個(gè)文件夾和Linux系統(tǒng)下的\system\bin文件夾沒多大區(qū)別。</p><p> ?、踈system\etc:與Linux系統(tǒng)下的\system\etc文件夾沒有本質(zhì)的區(qū)別,都用于保存系統(tǒng)的配置文件。

104、</p><p> ?、躙system\fonts:從名字上可以看出用于存放字體的文件夾。</p><p>  ⑤\system\framework:主要存放核心文件,其文件后綴名為jar,可以看出為系統(tǒng)構(gòu)架平臺(tái)。</p><p> ?、轡system\lib:用于存放系統(tǒng)底層庫。</p><p> ?、運(yùn)system\media:存放鈴聲的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論