android 畢業(yè)論文_第1頁
android 畢業(yè)論文_第2頁
android 畢業(yè)論文_第3頁
android 畢業(yè)論文_第4頁
android 畢業(yè)論文_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、本科生畢業(yè)論文(設計)題 目 google android手機嵌入式系統的研究與開發(fā) 學 院 計算機學院專 業(yè) 計算機科學與技術學生姓名 李 浩學 號 0643041362年級 2006指導教師 周群彪教務處制表二一 年 五 月 二十七 日google android手機嵌入式系統的研究及開發(fā)計算機科學與技術學生 李浩 指導教師 周群彪摘要 隨著手機的普及以及手機應用的深入人心,近幾年“智能手機”成為了人們關注的話題。在現今這個智能手機系統群雄紛爭的時候,2008年google推出了一款名為android的開源智能手機操作系統。android憑借其開放性和良好的人機界面,受到廣大手機生產商的重

2、視,隨著3g時代的到來,android有可能會改變現在智能手機市場的格局。android 是由linux操作系統、中間件以及核心應用程序組成的專門為移動終端設備開發(fā)的層次軟件集。在對android學習中,主要做了以下的研究:首先,android系統是一個層次的軟件集,所以先從層次方面對android進行系統研究,主要對其運行時環(huán)境層以及android應用框架層的研究;其次,通過對android平臺上應用的開發(fā),更進一步了解android這個系統,在開發(fā)中,尤其注重android的intent機制的使用。主題詞 android; android 內核層; android構架;android應用;

3、 android sdk;android 開發(fā) the research and development of google android embedded system computer sciencestudent: li hao adviser: zhou qun-biaoabstract 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 “s

4、mart phone system”. in 2008, google released their opening source smart phone operating system which called android. because of opening source and its nice ui. more and more mobile phone manufacturers use android in their phones. with the becoming of 3g,android may change the field of smart phones.

5、android compose of linux kernel, middleware and core applications. to study android, there something to do: firstly, android system is a hierarchical set system, so we should study its hiberarchy, especially in android runtime layer and android application framework layer; secondly through android a

6、pplication development, we can further understand the android the system, in development, we will use the android intent mechanism.key words android;android kernel;android truss; android application;android sdk;android development目錄1 緒論11.1智能手機平臺11.2 android 平臺介紹22 android的系統研究42.1 android構架42.1.1 a

7、ndroid的構架綜述42.1.2內核層52.1.3 android runtime和函數庫層52.1.4 dalvik 虛擬機72.1.5 android的進程管理機制102.1.6 應用程序框架層112.1.7 應用程序層112.2 android的應用112.2.1 android應用的組成112.2.2 activity122.2.3 intent receiver122.2.4 service122.2.5 content provider132.2.6 androidmanifest.xml132.3 android 文件系統152.3.1 系統文件夾分析152.3.2 系統構架與

8、系統文件的對應163 android的開發(fā)173.1 android開發(fā)工具173.2 android開發(fā)平臺的搭建173.3簡單短信功能軟件(minisms)的開發(fā)173.3.1 minisms工程建立及分析183.3.2 androidmanifest.xml設計193.3.3 ui設計203.3.4 短信發(fā)送功能的實現223.3.5短信息的接收功能243.3.6 虛擬機中運行28總結29參考文獻30聲 明31致 謝32附錄331 緒論1.1智能手機平臺說起手機,沒有一個人會感到陌生。近幾年來一個名詞一直影響著許許多多的手機用戶,它就是智能手機。智能手機憑借其強大的功能吸引住了許多用戶的眼

9、球,因為有了廣大的用戶基礎,智能手機也風靡一時。說起智能手機,除了他有一顆強大的cpu和其他一些較高配置的硬件外,其真正的智能還要歸功于其不可缺少的智能操作系統。當今,智能手機所搭載的智能手機操作系統平臺大致如下:(1)symbian os。搭載在具有廣泛群眾基礎的nokia手機上,并以此占據了智能手機的半壁江山,其主要的智能平臺為大部分諾基亞手機搭載的的s60系列和索尼愛立信手機搭載的uiq系列;(2)windows mobile。microsoft在桌面系統獲得成功之后,覬覦手機的巨大市場開發(fā)的智能手機系統,因其界面和桌面windows系統較為接近和其強大的微軟后臺,成為國內市場占有率緊跟

10、symbian之后成為國人比較喜歡的操作系統;(3)mac os x(iphone os)。蘋果一直都是個性和時尚的代名詞,受廣大中高層次手機用戶的喜歡。iphone,以其酷炫的ui和獨特的操作方式,給傳統手機帶來一場革命,同時也給symbian和windows mobile帶來巨大沖擊的;(4)blackberry。以商務應用為主,在國外尤其是歐美等地,受到商務人士歡迎的black barry占據了近一半的無線商務電子郵件業(yè)務市場,就連美國總統奧巴馬也使用該品牌的手機。但是在國內還是受到一些基礎設施的制約,所以在國內市場不是太好;(5)palm os。專門為pda開發(fā),一度占據了90%的pd

11、a市場的份額,雖然其并不專門針對于手機設計,但是以其優(yōu)秀性和對移動設備的支持同樣使其能夠成為一個優(yōu)秀的手機操作系統。(6)linux。對于linux系統,想必很多人都不會太陌生,桌面系統中以其開源的特性,贏得了不少用戶的喜愛。智能手機平臺的linux同樣具有源代碼開放、軟件授權費用低、應用開發(fā)人才資源豐富等優(yōu)點,便于開發(fā)個人和行業(yè)應用。但是因為其平臺上的應用少而不被國人所接受。(7)google android。自2007年推出,2008年第一部搭載android系統的g1上市至今不到短短三年時間,他已被許多人接受并且認可及歡迎。雖然如今的智能手機系統市場仍被symbian、windows m

12、obile的占領,但是iphone的革命以后,以及后起之秀android的推出,在將來,智能手機市場將發(fā)生翻天覆地的變化。1.2 android 平臺介紹android從誕生到現在也不過3年的時間,但是也就是在這短短的3年內android創(chuàng)造了一個迅速被人們知曉并追捧的奇跡。2007 年11 月5 日,google 與其他33 家手機制造商(包含摩托羅拉、宏達電、三星、lg)、手機晶片供應商、軟硬體供應商、電信業(yè)者所聯合組成的開放手持裝置聯盟(open handset alliance),發(fā)布了名為android的開放手機軟硬體平臺。該聯盟的成員宣布日后都會在android平臺上開發(fā)他們的新的

13、業(yè)務。不久之后的2008 年9 月24 日,t-mobile 公司首度公布第一臺android 手機(g1)的細節(jié),同日google 也放出了android sdk 1.0 rc1。這樣android進入了人們的視線。android以其特有的開放性優(yōu)勢越來越受到人們和智能手機廠商的關注。對于第三放軟件開發(fā)商來說,android 是一個真正意義上的開放性移動設備綜合平臺,android系統是免費向開發(fā)人員提供的,這樣就避免了開發(fā)中專利權的障礙。因此,就能夠為第三方軟件開發(fā)商省下大筆資金。對于設備制造商來說,android是一個免費的平臺。當設備制造商每制造一臺手機時,那些支付給手機系統制造商的費

14、用也省去了,這樣也降低了每臺手機的生產費用,同時就降低了手機的價格,這樣在市場上也提高了競爭力。對硬體開發(fā)廠商來說,android也是個開放的平臺。使用android平臺的廠商可以更具自己的需求以及能力為android開發(fā)具有該廠商特色的功能,但是這樣的增加完全不用考慮版權的問題。同時android平臺支持各種先進的網絡、繪圖、3d 處理能力,可以用來提供更好的使用者體驗。google android 系統作為一個完全開源的操作系統,是由操作系統(linux)、中間件以及核心應用程序組成的軟件棧(software stack)。通過 android sdk 提供的 api 以及相應的開發(fā)工具,

15、 程序員可以很方便的開發(fā)android平臺上的應用程序。其整個系統由應用程序(application),應用程序框架(application framework),應用程序庫(libraries),android運行庫(android runtime),linux內核(linux kernel)五個部分組成。android操作系統內置了一部分應用程序, 包括電子郵件客戶端、sms程序、日歷、地圖、瀏覽器、通訊錄以及其他的程序,值得一提的是這些所有的程序都是用java編寫的。因為應用程序框架使得組件更易于重用,所以開發(fā)者的應用程序可以很容易的調用api函數實現我們想要的功能。在遵守應用程序框架的

16、安全機制約束的前提下,開發(fā)者開發(fā)的一個應用程序可以使用其他程序所開發(fā)的功能。雖然android的應用程序是用java語言開發(fā)的,但是android給應用程序開發(fā)者提供了一系列的 c/c+ 程序庫,通過android的一些特殊的設計,我們開發(fā)者可以使用這些庫,這在后面的敘述中將看到。現今,android操作系統已成為許多手機制造商的寵兒,其中包括htc、索尼愛立信、samsung、摩托羅拉以及國內的聯想、華為、海爾、華禹等。其中值得一提的是摩托羅拉公司,就在2009年11月憑借其一款搭載android平臺的droid手機,兩個月內就突破百萬臺,擊敗了蘋果的iphone 3gs,被時代雜志評選為“

17、年度最佳科技產品”。因此告別了兩年多的低迷態(tài)勢,走出了泥潭。2 android的系統研究2.1 android構架2.1.1 android的構架綜述android是一個包括操作系統,中間件以及一些重要應用程序的專門針對移動設備的層次結構的軟件集1。作為一個層次結構的軟件集,一定有一個層次的系統構架,下圖為android的構架圖: 圖2-1 android 系統構架從圖2-1中明顯的可以看出該系統從下到上包括linux內核層、libraries和運行時環(huán)境層、應用程序框架層、應用程序層四層結構。在android的最下層的操作系統基于linux2.6內核,往上的中間件包括libraries和運行

18、時環(huán)境層和應用程序框架層兩個層次,最上層則是應用程序層。在android構架中,可以很明顯的看到,底層的linux內核則采用的是c語言,libraries采用c或者c+,但是應用程序層、應用程序框架層和運行時環(huán)境中的android核心庫采用java語言編寫,也就是說android雖然底層用的是c或者c+但是應用程序的開發(fā)則用的是java。google采用這樣的模式可能是因為相對于c或者c+,java的開發(fā)周期更短的緣故,這樣的話就能在短時間內為android提供大量的應用軟件。我們知道,作為一個智能手機平臺,只有擁有了大量的源源不斷的應用程序作為支持,才能受人們的歡迎,從而才能占領市場。之前n

19、okia的s60第三版就是一個很好的例子,因此nokia s60v3的系統才被世人所熟知,并且曾經在智能手機行業(yè)占有很大的市場。而另一個例子就是linux系統,在所有操作系統中,穩(wěn)定性和性能上能夠和linux抗衡的系統不多吧,但是在智能手機市場上為什么linux卻可以說是一敗涂地,其原因也和其第三方應用少是脫不了關系的。2.1.2內核層google android 作為一個開源的操作系統其內核采用了同樣開源的被業(yè)界認為是相當穩(wěn)定的linux作為其內核,其中l(wèi)inux內核包括以下功能模塊:安全(security)、存儲器管理(memory management)、進程管理(process man

20、agement)、網絡堆棧(network stack)、驅動程序模型(driver model)等,另外也在給其上層的軟件和下層硬件間建立起一個抽象層(abstraction layer)。同時android在linux 2.6的內核上進行了一些增加和刪改,使linux更加適應arm平臺。增加了一個基于arm構架的goldfish平臺作為虛擬機的虛擬cpu。增加了yaffs2 flash系統文件,因此增加了對nandflash支持。增加了android相關的驅動。例如android的ipc(進程間通信機制)binder,使用這個能使運行的進程為其他進程提供服務;android的日志系統(lo

21、gger)和內存控制臺(ram_console);同時google還重寫了電源管理(power)增加了新的共享方式ashmem(匿名共享內存),多個應用程序可以這種方式共享內存獲取信息,為進程間提供大量共享內存,同時為內核提供回收和管理這個內存的機制。2.1.3 android runtime和函數庫層2.1.3.1函數庫android 包含一些c/c+庫,android系統中的各種不同組件都能夠使用這些庫函數。這些庫函數通過android 應用程序框架為開發(fā)者提供服務。以下列舉了一些庫函數2:系統 c 庫-一個專門為embedded linux設備定制的從bsd(berkeley softw

22、are distribution 伯克利軟件套件)繼承來的標準c系統函數庫。媒體庫 - 基于 packetvideo公司的opencore開發(fā)設計的。該庫支持mpeg4, h.264, mp3, aac, amr, jpg, png多種常用的音頻、視頻格式的回放和錄制,同時支持靜態(tài)圖像文件。surface manager - 對顯示子系統的管理,并且為多個應用程序提 供了2d和3d圖層的無縫融合,提供如同類似iphone的界面管理功能。libwebcore - 一個支持android瀏覽器和一個可嵌入的web視圖的最新的web瀏覽器引擎。3d libraries - 基于opengl es 1

23、.0 apis實現;該庫可以使用硬件 3d加速(如果可用)或者使用高度優(yōu)化的3d軟加速。sqlite - 一個功能強勁的輕型關系型數據庫引擎,android中所有應用程序都可以調用它。freetype -位圖(bitmap)和矢量(vector)字體顯示。sgl - 底層的2d圖形引擎。2.1.3.2 android runtime前面說到android采用java作為應用程序的開發(fā)語言,但是雖然使用的是java語言,但是google卻沒使用傳統的java runtime來執(zhí)行應用程序而是采用android自己特有的android runtime。從android 的系統構架圖中可以清楚的看到

24、,android runtime由android函數庫(android libraries)和dalvik虛擬機組成3。 android函數庫中里包含了大部分java程序語言所需要調用的函數庫,如data structure, network, utilities, file system等,其中很多代碼是源于2005年的apache harmony項目。這樣做的話能夠使android的虛擬機的類庫與java se的類庫有非常大的相似性,進而提高了java se類庫的兼容性,最大限度的降低了一個程序員從java平臺開發(fā)到andorid平臺開發(fā)的難度,這樣就降低了對android開發(fā)的準備時間以

25、及前期培訓的費用,從而降低了android應用程序開發(fā)的周期以及開發(fā)費用,這樣的話短時間內就能讓google android系統能夠擁有大量的可執(zhí)行的應用程序。另外,使用apache harmony 類庫還能完全擺脫sun的束縛而走上完全開源的java之路,這樣也奉行了google對android完全開源的原則。我們知道,對一個應用程序而言,都采用一個屬于該應用程序的進程作為執(zhí)行的載體,同樣,對于android也是,一個應用程序也是有一個屬于它的進程。之前說過android采用java作為開發(fā)語言,在進程執(zhí)行時應該會有一個java虛擬機來為進程提供服務。在android構架圖中可以看到, 該系

26、統采用的是一個叫做dalvik的虛擬機。在前面的研究中我們了解到dalvik虛擬機是一個java 虛擬機,但是又和java虛擬機有所不同。dalvik虛擬機和傳統的java虛擬機所不同之處的是傳統的java虛擬機是一個虛擬機來為不同應用程序提供服務,而google自己開發(fā)的dalvik虛擬機則是每一個android應用程序都擁有一個其自身的dalvik虛擬機,換句話說就是專屬于每一個應用程序對應著一個dalvik虛擬機而這個dalvik虛擬機相當于一個執(zhí)行個體。有關dalvik虛擬機的內容將在下一個部分詳細說明。android函數庫和dalvik虛擬機組成了android的運行時環(huán)境。從圖中可

27、以看到,android runtime和libraries在同一層,建立在linux kernel 層之上,與linux kernel 沒有交集,而是直接嵌套到libraries中。我們之前說過,我們開發(fā)者可以調用c和c+的一些類庫。其實就是這樣android runtime與libraries在同一層的設計并同時讓android runtime 中的android libraries 引用libraries中的函數,而通過dalvik虛擬機編譯以后再調用這些函數做到上面所述的功能。也就是說其實android libraries中的函數只是libraries中的一些引用,當一個上層的應用程序調

28、用dalvik虛擬機中的核心庫函數時,調用的其實只是一個函數名,并不是函數的具體實現,然后dalvik虛擬機對該函數進行一些處理以后再通過dalvik虛擬機調用libraries中的相應函數,使之運行。換句話說就是,android libraries中的只是一個函數名,而真正代碼的實現是libraries中的c或者c+代碼。這樣的好處就在于那些使用java語言很難實現但是在c或者c+卻能很容易實現的功能也能通過java很容易等的實現。應用程序進程調用runtime中android函數庫函數android librariesandroid runtimedalvik虛擬機交給dalvik虛擬機進

29、行處理librariesdalvik虛擬機調用libraries中相應函數圖2-2 應用程序調用android libraries中函數的過程2.1.4 dalvik 虛擬機dalvik虛擬機是android runtime的一個組成部分,之所以要把他拿出來單獨進行研究是因為,dalvik虛擬機作為一個java虛擬機,但它和普通的java虛擬機有著一些不同。google的工程師結合傳統的java 虛擬機,根據android使用的平臺一般為移動終端設備這樣一個特點重新設計的虛擬機,這個虛擬機在移動終端設備上運行效率上明顯比傳統的java 虛擬機要高許多。dalvik虛擬機對內存的高效使用和在低速

30、的cpu上表現出的高性能,確實讓人們刮目相看。android的上層應用程序雖然是用java開發(fā)的,但是dalvik虛擬機卻和傳統的java虛擬機有著很大的區(qū)別,兩者是不兼容的。首先,眾所周知在java 中,所有的程序代碼會被編譯器編譯成字節(jié)碼(.class)文件,然后再打包成jar文件,在執(zhí)行時java虛擬機就從jar文件中提取出相應的字節(jié)碼文件來執(zhí)行。在android中不再使用字節(jié)碼文件而是一種android所特有的dex(dalvik executable)文件。dex文件的生成還是需要經過生成字節(jié)碼文件的這個過程的。使用java語言編寫好的android程序代碼,同樣是先用java編譯器

31、編譯成為字節(jié)碼文件,但是在這之后還需通過google提供的一個dx工具將編譯好的字節(jié)碼轉換成為dex文件,然后dalvik虛擬機通過dex文件獲得執(zhí)行的代碼。google棄用字節(jié)碼文件而采用特有的dex文件格式,這表明在android實際運行中dex文件格式相對于字節(jié)碼文件格式應該有一些獨特的優(yōu)勢。在java中當一個應用程序定義了多個類后,通過編譯則會產生相應數目的class字節(jié)碼文件,在這些字節(jié)碼文件中則必然會有冗余信息,例如一些相同的類庫會冗余等。而dex文件格式則是把這些class字節(jié)碼文件整合到一個dex文件中,使得字節(jié)碼中的冗余減少了,同時使整體文件的尺寸也減少了。這樣一來,對于同一

32、個應用程序來說,相對于java的字節(jié)碼文件android的dex文件格式在i/o操作中所需要的時間也減少了,同時也減少了查找類所需要的時間。另外dex使用等長的指令,這樣的話能夠使得dex文件盡量的簡潔,從而提高了解析速度。通過上面的研究可以看出dex文件格式是一種專為dalvik虛擬機設計的壓縮格式,該格式的高性能很適合內存和處理器速度有限的平臺,從中可以看出android是定位于嵌入式平臺的一個操作系統。在這也體現出了google給android所定義的發(fā)展以及戰(zhàn)略方向,如今移動平臺的網絡應用已經成為當前移動終端設備的發(fā)展方向,作為網絡搜索的龍頭大哥,android就是其打入該移動平臺網絡

33、應用的利器。android應用開發(fā)和dalvik虛擬機同樣都使用java開發(fā)語言,在應用程序開發(fā)好以后我們就需要將這個應用發(fā)布到android移動終端設備。我們把一個開發(fā)好的應用的java代碼經過編譯以后生成.class的字節(jié)碼文件,通過android的dx工具轉換成.dex格式的文件,最后使用android的appt打包工具把dex文件,源文件以及androidmanifest.xml文件組合成一個apk應用程序包,然后就能發(fā)布到移動終端設備上了。在apk應用程序程序包發(fā)布到移動終端設備后,應用程序運行前會對其中的dex文件進行優(yōu)化,優(yōu)化后的文件格式稱之為dey,dey文件被保存到緩存區(qū)域,

34、虛擬機會在緩存中執(zhí)行這些文件。其次,傳統的java 虛擬機是采用的是基于棧的設計,而dalvik虛擬機則是基于寄存器設計的?;跅TO計的虛擬機能夠使指令變得簡單,不需要考慮程序中的源寄存器和目的寄存器,只需要開辟棧空間而不需要為臨時變量再開辟一個存儲空間。另外基于棧設計的虛擬機移植性比基于寄存器設計的虛擬機要高很多,從組成原理和嵌入式操作系統課程中我們知道,一般的32位x86處理器的通用寄存器和32位的arm的通用寄存器數目是不同的。虛擬機的設計中,為了執(zhí)行的效率,有時會把這些寄存器一一映射到物理寄存器上,但是由于平臺的不同,導致通用寄存器數量不同造成如果基于寄存器設計的虛擬機很難做到一一映射

35、,執(zhí)行效率就會大打折扣。而用基于棧的設計的話,就不存在這種問題,就很容易的分配寄存器。另外,基于棧設計的虛擬機采用的是零地址指令,這樣的話指令形式比較緊湊。雖然基于棧結構的虛擬機有上述的一些優(yōu)點,但是為什么google不采用基于棧的設計而采用基于寄存器結構設計dalvik虛擬機呢。我個人覺得這是和android所搭載的平臺以及google的戰(zhàn)略有關的。首先,android所搭載的主要平臺為移動終端設備,如今的移動終端設備雖然性能比過去好多了,但是還是無法擺脫cpu處理能力低于桌面pc,存儲資源有限的限制,在這樣一個平臺上使用基于棧的設計,在指令執(zhí)行時必定會多出一個進棧(push)和出棧(pop

36、)的操作,那一定會影響指令執(zhí)行的效率,這也是為什么我們在一些手機平臺上運行java程序時感到很慢的原因了。其次從google對dalvik虛擬機設計中采用的16個通用寄存器中可以看出android的發(fā)展方向是基于arm的硬件平臺,這也和google的戰(zhàn)略方向相一致。雖然移植性降低了,但是使用二地址和三地址的指令,使得代碼執(zhí)行效率大大提高。另外,dalvik虛擬機雖然沒有采用現在流行虛擬機技術例如jit(just in time,及時編譯)技術,但是dalvik虛擬機仍然是一個具有很高性能的虛擬機,在這不得不說一下,dalvik虛擬機是一個設計相當不錯的虛擬機。從dalvik虛擬機的設計上我們可

37、以看到google打算用android系統來沖擊手機移動終端設備,想把其提供的服務擴展到移動設備上的戰(zhàn)略。另外,dalvik虛擬機的設計方面也有其獨特的地方。它就是本著能夠并發(fā)執(zhí)行多個虛擬機的設計思路來編寫的。每一個dalvik虛擬機實例對應于一個應用程序,同時這個虛擬機實例還都是一個進程空間。換句話說就是一個應用對應一個dalvik虛擬機同時對應一個進程空間。不同的應用程序在不同的dalvik虛擬機實例中運行,不同的dalvik虛擬機又對應于不同的進程空間,加之不同的應用程序在linux內核中以不同的linux用戶來執(zhí)行,這樣可以最大限度的保證應用程度的獨立性和安全性。但dalvik虛擬機要

38、實現如線程機制,內存的分配和管理等操作的話,仍然需要底層操作系統的支持。另外dalvik虛擬機線程機制中的一個線程對應于linux中相應的一個線程,這樣操作系統中的線程就能最大限度的為dalvik虛擬機服務。通過這樣的一個設計,android的安全性大大提高了。說到dalvik虛擬機,那就應該說說虛擬機中的一個特殊的虛擬機進程zygote,之前說過一個dalvik虛擬機對應一個進程空間。zygote進程的功能有點類似于linux中的1號進程,在linux當系統啟動時即產生1號進程,而其他的進程都由1號進程創(chuàng)建。在dalvik虛擬機中zygote進程fork出所有的虛擬機進程,每當系統提出執(zhí)行一

39、個android應用時,需要一個dalvik虛擬機是,zygote就會fork出一個子進程來執(zhí)行該應用。使用它可以加快系統的執(zhí)行,因為zygote進程在系統啟動時就產生,已經完成了虛擬機的初始化,預置類庫的加載和初始化等等操作。當我們要執(zhí)行一個應用而建立一個虛擬機時,只需讓zygote進程自身復制,這樣就可以減少虛擬機初始化等操作的時間。另外,對于一些只讀庫所有虛擬機實例都和zygote進程共享一塊內存區(qū),這樣大大減少了對內存的開銷。2.1.5 android的進程管理機制android雖然是基于linux,但是它卻采用了一種有別于linux的一種管理機制。linux在一個進程活動停止后就立刻

40、結束該進程,而android在一個進程活動停止后不會立刻結束該進程,并使該進程常駐內存中。直到系統資源不夠需要更多內存或者當某個結束進程的事件發(fā)生時才將該進程結束。在android中進程被分成了前臺進程(foreground)、可見進程(visible)、次要服務(secondary server)、后臺進程(hidden)、內容供應節(jié)點(content provider)、空進程(empty)六種。前臺進程是指一些系統進程和當前屏幕上正在顯示的進程。比如說你打開google地圖查找路線,此時google地圖就是一個前臺進程??梢娺M程則是那些雖然不在前臺,但是用戶依然可見的進程,如輸入法,時鐘

41、等,這些進程雖然不是在前臺運行的,但是其存在和我們的使用卻是密切相關的,如果關閉了這些應用程序將給我們的使用帶來非常大的不便次要服務是一些與系統功能息息相關的服務,如google企業(yè)套件等。后臺進程,可以這么說后臺進程就是一個前臺進程被另一個前臺進程替換后,進程沒有結束,但是已經不再是前臺進程的一個狀態(tài)。在實際應用中就是當一個前臺進程運行時按home鍵后的進程狀態(tài)內容供應節(jié)點是沒有程序實體,而是僅僅提供內容給別的程序使用的比如說日歷節(jié)點空進程是沒有任何東西在運行的進程,在一個程序退出后會有一個沒有任何數據和代碼在運行但是依然駐留在進程空間中的進程,該進程僅僅是作為一個能夠提高該程序下次啟動速度

42、和記錄程序歷史記錄的進程。android在調度以上幾種進程時使用了一個系統值作為系統對進程的一個評估,當要結束一個進程時該值的數值越大的進程被系統選中并結束的概率越大。一般的,前臺進程的值為0,這表明前臺進程不可能被系統選中并結束。當進程進入后臺以后,系統將會分配一個更高的值給該進程。相對于linux的最近最早未使用的調度策略,android在其基礎上提供了一套獨特的進程管理模塊,他能讓程序員使用腳本來對內存管理進行定制。比如當內存小于某個值時可以結束這個系統值大于另外一個值的進程,還可以當內存小某個值時結束上面六類進程中的一類(但順序必須是空進程,內容供應節(jié)點,后臺進程,次要服務,可見進程,

43、最后才是前臺進程)。根據這種特性 該系統值至少由兩部分組成,一個是基值,另一個根據lru(最近最久未使用)調度算法產生的一個值。對于以上說的六種進程應該分別有一系統給其賦予的值,其大小順序應該是空進程大于內容供應節(jié)點大于后臺進程大于次要服務大于可見進程大于前臺進程,而這個系統賦予的值則是基值。這樣就能保證一些這六種進程總是當一種進程被結束完了以后另外一種進程才會被結束,同時只需要根據這個系統值就能輕易做到對內存管理的定制。2.1.6 應用程序框架層在android系統構架圖中可以看到,應用程序框架層是處于android runtime和庫函數層于應用程序層之間,之前的敘述中知道,該層使用開發(fā)語

44、言的是java語言。應用程序框架是能夠讓開發(fā)者完全訪問核心應用程序所使用的api(application programming interface,應用程序編程接口),該框架能夠讓組件軟件重用的工做簡單化。同時該框架中的任何一個功能模塊都是等價的,任何一個應用程序都可以發(fā)布其功能模塊,該功能模塊可以替代當前的任意一個功能模塊,但前提是必須遵循框架的安全限制4,另外,其他的任意應用程序能夠使用這個發(fā)布的功能模塊。這樣的設計就使android的構件重用率提高了。在每一個應用程序背后,應用程序框架為其提供了一系列的服務。這些服務包括:一個豐富并且可擴展的視圖,通過這個視圖我們可以使用它提供的一些包

45、括按鈕、文本框、列表、網格等甚至可嵌入的web瀏覽器的應用程序來構造我們的應用程序。內容提供器(content providers),有了內容提供器,一個應用程序可以共享它自己的數據或者訪問另外一個應用程序中共享的數據。資源管理器(resource manager),使用資源管理器,我們在應用程序中能夠訪問到一些如圖形、布局文件等一些非代碼資源。通知管理器(notification manager),給程序員提供了一個可以在程序狀態(tài)欄中顯示自定義提示信息的管理器。活動管理器(activity manager),提供常用導航功能用來管理應用程序生命周期的服務。通過這些應用程序框架層提供的服務程序

46、員能夠方便的開發(fā)一個界面優(yōu)秀功能強大易于共享的的應用程序。2.1.7 應用程序層回到android系統構架圖中,應用程序層包括了如名片管理、google maps、瀏覽器等本地應用程序(native apps),如qq、msn、quickoffice等第三方應用程序(third part apps),以及developer apps。同樣,該層的應用程序也都使用java語言進行開發(fā)的。2.2 android的應用2.2.1 android應用的組成任何一個android應用程序,都可由四個部分組成,這四個組成部分分別是activity;intent receiver;service;conte

47、nt provider5。對于一個應用程序來說,不一定這四個部分都需要。其中,activity、intent receiver和service是android最基本的三個組件。其實,這四個部分全部或者其中幾個的相互協調工作組成了我們平時見到的應用程序。在android中每個應用程序都需要一個xml配置文件androidmanifestxml,該配置文件用于定義我們的應用程序組件和組件的功能以及一些必要條件等。因此當我們使用到任何一個組件時都需要在這個配置文件中進行登記,否則就算是你在代碼中使用了這個組件,但是android系統也是找不到該組件的。2.2.2 activityactivity是a

48、ndroid中最最基本的組件,實際應用中,通常就是一個單獨的屏6,也就是一個運行在前臺程序在某一時刻在屏幕中所能展示的全部內容就是一個activity。每一個activity都是繼承于activity基類的一個子類,并且該activity類由幾個之前說過的應用程序框架提供的視圖組成用戶接口,實現對事件的響應。絕大部分的應用都會包含多個屏幕,例如名片管理的應用,一個屏用于顯示所有的聯系人,另一個屏用于顯示其中某個聯系人的詳細信息,可能還會有用于分組信息或者用于系統設定的屏。對于這些,每一個屏都是一個activity。當一個新的activity執(zhí)行以后,前一個activity將暫停,并保存到系統歷

49、史堆棧當中,用戶可以返回到歷史堆棧中的上一個activity。當該activity不用時可以從歷史堆棧中刪除。2.2.3 intent receiverintent receiver有的地方也叫做broadcast receiver。當你希望你的應用能夠捕獲一個外部事件并作出響應時,比如手機快沒電了,收到一條新的短信息等。這時你就可以使用一個intent receiver。因為intent receiver只是在一個你所關注的事件發(fā)生時,會給那些關注該事件的應用程序發(fā)送一個通知,所以它并不會生成一個ui。同樣的intent receiver也需要在androidmanifest.xml中進行注

50、冊。當一個你所關注的時間發(fā)生時,我們的應用不需要主動去調用intent receiver,系統會在一個合適的時候去調用我們的程序的。2.2.4 serviceservice是一段長生命周期的,沒有用戶界面的程序。我們舉一個播放器的例子,來說明service程序。當一個播放器在前臺運行時我們會看到應用程序提供的一個屏,也就是之前說的activity,這個activity提供給用戶一些操作播放器如播放、停止、下一曲等操作以及顯示一些歌曲和播放列表信息的功能。但是當播放器被切換到后臺以后,所有的activity都放到歷史堆棧中了,而這時播放器任然繼續(xù)進行播放,而當一首歌曲播放完了以后,還會根據播放列

51、表中的信息播放下一首歌曲。完成這些功能的組件就是service。當播放器的activity利用context.startservice()方法啟動一個service后,這個播放器就能夠在后臺持續(xù)的播放音樂了。還有,對于一個service組件,我們可以使用context.bindservice()連接到service上,就能通過該service提供的接口與之進行通信。2.2.5 content providercontent provider提供給你的應用程序與其他應用程序共享數據的一個功能。我們的應用程序可以通過content provider提供的一些方法來處理或者保存其他應用程序conte

52、nt provider中的數據,這樣來達到數據的共享。2.2.6 androidmanifest.xml之前提到過,每一個android應用程序都包括了一個androidmanifest.xml配置文件,它對應了應用程序的說明,包括運行權限,組件的注冊等。其實androidmanifest.xml配置文件和使用visual studio開發(fā)中的manifest.xml很相似,但是vs的可視化的界面的緣故,只需進行簡單的設置,就能自動生成該文件,所以不少的vs程序員會忽略掉該文件的存在。但是在android應用程序開發(fā)中,該文件是不可缺少的。應用程序在運行前通過androidmanifest.x

53、ml文件向系統提供一些必要的信息,讓系統知道該應用程序應該如何配置。android應用androidmanifest.xmlactivityintent receiverservicecontent provider圖2-3 androidmanifest.xml示意圖先舉一個androidmanifest.xml文件的例子然后從該例子中詳細描述一下這個配置文件:01 02 06 07 08 09 10 11 12 13 14 這是一個簡單helloandroid程序的androidmanifest.xml配置文件,從這個配置文件中我們能夠知道,該應用僅包含了一個activity。下面將對這個

54、配置文件做一個詳細的描述。第1行是一般xml文件都有的頭部信息說明,其中包括xml的版本和文件編碼方式。第2行和第14行則是一對“manifest”標簽,每一個androidmanifest配置文件中必須有且只有一對“manifest”標簽,所有androidmanifest中的描述都應該包含在這對標簽中。第35行是“manifest”標簽的屬性,這個例子中的 package屬性說明應用程序的入口在test.hello這個包下面。而“android:versioncode”和“android:versionname”兩個可選的屬性則是說明應用程序的版本號,其中“android:versionn

55、ame”是面向用戶的版本號,而“android:versioncode”則是開發(fā)者使用的內部版本號。第6行和第13行是一對“application”標簽,該標簽中定義了所有應用程序所使用的activity、intent receiver、service等。該標簽的“android: icon”屬性定義了應用程序顯示在android主界面中的圖標而drawable/icon表示該應用程序圖標的路徑為/res/drawable/icon。第7行和第12行是一對“activity”標簽。在android的應用程序當中所有定義好的的activity都需要在androidmanifest.xml中添加一

56、組“activity”標簽,不然的話即使你定義了,但是android應用程序也找不到。在上面給出的例子中,僅僅有一組“activity”標簽,這也說明了給出的例子的應用程序只有一個activity。緊接其后的是“activity”標簽的屬性,“android: name”屬性表示了activity所對應的類,上述例子中的類是helloandroid類,結合package的路徑,它表示的是test.hello.helloandroid類。另外,在屬性中“android: name”的值可以直接寫為“helloandroid”,因為其已經定義到了test.hello包下面了。“android:labe

溫馨提示

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

評論

0/150

提交評論