版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
中英文對(duì)照外文翻譯(文檔含英文原文和中文翻譯)1什么是Android1.1主要技巧和思想● 歷史的嵌入式器件編程● 開放手機(jī)聯(lián)盟的解釋● 第一眼看到Android的主屏幕可以這么說(shuō),暫時(shí),傳統(tǒng)的桌面應(yīng)用程序開發(fā)者已經(jīng)被慣壞了。這個(gè)不是說(shuō)桌面應(yīng)用程序開發(fā)比其他形式的開發(fā)很簡(jiǎn)單??傊?,作為傳統(tǒng)桌面的應(yīng)用程序開發(fā)者,凡是我們能想象到的各種應(yīng)用程序,我們就一定有能力創(chuàng)造。包括我自己,因?yàn)槲乙彩菑淖鲎烂娉绦蜷_始的。一方面已經(jīng)使得桌面程序更容易理解就是我們已經(jīng)有能力去跟桌面操作系統(tǒng)相互作用,因此,任何底部的硬件很自由的相互作用。這種類型獨(dú)立自主的程序編制,然而,對(duì)于很小的開發(fā)者團(tuán)體來(lái)說(shuō)是不敢冒險(xiǎn)的去搞手機(jī)發(fā)展這樣渾濁的技術(shù)的。注解:我提到兩種不同的開發(fā)商在此討論:傳統(tǒng)的桌面應(yīng)用程序開發(fā),他們能在任何語(yǔ)言環(huán)境下工作,而且最終的產(chǎn)品和程序是用來(lái)運(yùn)行“桌面”操作系統(tǒng)的;還有Android程序開發(fā)者,那些開發(fā)Android平臺(tái)開發(fā)工具的JAVA程序開發(fā)人員。這不是說(shuō)跟其他人比起來(lái)誰(shuí)好誰(shuí)壞。其實(shí),區(qū)別目的僅僅在于想說(shuō)明并比較Android桌面操作系統(tǒng)環(huán)境的開發(fā)風(fēng)格,工具。1.2嵌入式器件編程的簡(jiǎn)要?dú)v史有很長(zhǎng)一段時(shí)間,手機(jī)的開發(fā)者由大的著名嵌入式的開發(fā)團(tuán)隊(duì)中的少數(shù)人組成,作為嵌入式設(shè)備的開發(fā)者。相對(duì)于桌面開發(fā)或者后續(xù)的網(wǎng)絡(luò)開發(fā),被視作更少“魅力”,而且嵌入式設(shè)備的開發(fā)通常因?yàn)橛布筒僮飨到y(tǒng)而處于劣勢(shì)。因?yàn)榍度胧皆O(shè)備的制造商們太小氣,他們要保護(hù)他們硬件方面的秘密,所以他們給開發(fā)者們非常有限的庫(kù)去運(yùn)行當(dāng)他們嘗試去讓一些特定的設(shè)備去相互作用。嵌入設(shè)備與桌面系統(tǒng)顯著不同的一部分是嵌入設(shè)備是個(gè)有特色的“芯片上的電腦”。例如:考慮你的標(biāo)準(zhǔn)電話遙控。這個(gè)并不是一個(gè)非常強(qiáng)大并且復(fù)雜性的技術(shù)。當(dāng)任何的按鈕被按下去,一個(gè)芯片解釋一個(gè)信號(hào)以一種方式已經(jīng)被編程進(jìn)了這個(gè)設(shè)備。這個(gè)允許設(shè)備知道什么是從輸入設(shè)備(鍵盤)來(lái)的需要。并且如何的響應(yīng)這些命令(比如,打開電視機(jī))。這個(gè)是一個(gè)簡(jiǎn)單的嵌入式設(shè)備的編程??傊还苣阆嗖幌嘈?,像這樣的簡(jiǎn)單設(shè)備絕對(duì)的和早期的手機(jī)設(shè)備開發(fā)的根源有著緊密的聯(lián)系。大多數(shù)的嵌入式設(shè)備運(yùn)行(有些仍然還在運(yùn)行)在私有的操作系統(tǒng)。原因是選擇創(chuàng)建一個(gè)私有的操作系統(tǒng)而不是用任何消費(fèi)系統(tǒng)是產(chǎn)品的需要。簡(jiǎn)單的設(shè)備不需要非常健全和優(yōu)化的操作系統(tǒng)。作為一個(gè)產(chǎn)品的演化,更多復(fù)雜的嵌入式設(shè)備,如早期的PDA,家庭安全系統(tǒng)和GPS等。5年前某種程度上都轉(zhuǎn)移標(biāo)準(zhǔn)的操作系統(tǒng)平臺(tái)上。小的操作系統(tǒng)如Linux,甚至一個(gè)微軟版本的嵌入式平臺(tái),已經(jīng)在嵌入設(shè)備上變得普遍了。設(shè)備改革的這段時(shí)間里,手機(jī)從其他嵌入式設(shè)備中分支出去。走上了自己的軌道,這個(gè)分支是顯而易見的當(dāng)你去調(diào)查他們的體系結(jié)構(gòu)。在他們最初開始的時(shí)候,手機(jī)作為一個(gè)外圍設(shè)備并且運(yùn)行私有軟件,而這些軟件被制造商們所擁有和控制,而且?guī)缀蹩梢员徽J(rèn)為是一個(gè)“關(guān)閉”的系統(tǒng)。習(xí)慣使用私有操作系統(tǒng)主要是制造商自己開發(fā)硬件,或者至少定義了開發(fā)的目的只是用來(lái)運(yùn)行手機(jī)。最終的結(jié)果就是使開放成為不可能?,F(xiàn)有的軟件包或者解決方案會(huì)可靠的和他們的硬件交互。而且,制造商想要保護(hù)他們硬件的商業(yè)秘密。以防允許進(jìn)入而發(fā)現(xiàn)設(shè)備軟件的水準(zhǔn)。所以風(fēng)尚就是,而且大多數(shù)仍然是使用完全私有并且關(guān)閉的軟件來(lái)運(yùn)行他們的設(shè)備。任何人想為手機(jī)開發(fā)程序必須需要詳盡的私有環(huán)境來(lái)運(yùn)行軟件的知識(shí)。而解決方案就是直接從制造商那里購(gòu)買昂貴的開發(fā)工具。這就孤立了很多的“自制軟件”的開發(fā)者。注解:一個(gè)關(guān)于自制軟件開發(fā)的文化包含了手機(jī)程序的開發(fā)?!白灾栖浖笔侵搁_發(fā)者通常不是工作在手機(jī)開發(fā)公司內(nèi),通常利用自己的時(shí)間在他們的設(shè)備上生產(chǎn)小的,一次性的產(chǎn)品。另外,使手機(jī)開發(fā)無(wú)法出手的是硬件制造商對(duì)于“內(nèi)存和需要”左右為難的解決方案。直到最近,手機(jī)才能執(zhí)行比打出和接聽電話,查找聯(lián)系人,發(fā)送和接收短消息。不是今天“瑞士軍刀”的技術(shù)。及時(shí)在2002年,在消費(fèi)者的手上,帶照相機(jī)的手機(jī)還是不多見。在1997年,小的應(yīng)用程序如計(jì)算器和游戲爬進(jìn)了手機(jī)內(nèi),但是強(qiáng)大的功能仍然是手機(jī)的撥號(hào)盤本身。手機(jī)還不想今天一樣是一個(gè)多用途,多功能工具。沒有人預(yù)見互聯(lián)網(wǎng)瀏覽的需求,MP3播放,或者更多的是我們今天定制的功能。在1997年,手機(jī)制造商們沒有預(yù)見消費(fèi)者需要的是一個(gè)一體化的設(shè)備。但是,即使這個(gè)需求展現(xiàn)出來(lái),設(shè)備內(nèi)存和存儲(chǔ)容量還是一個(gè)需要克服的大的障礙。更多的人可能想要他們的設(shè)備是一個(gè)多功能一體化的工具,但是制造商們不許跨越他們的障礙。讓問題變得簡(jiǎn)單,就要在任何的設(shè)備讓內(nèi)存來(lái)存儲(chǔ)并運(yùn)行程序,包括手機(jī)。手機(jī)作為一個(gè)設(shè)備,直到最近還沒有足夠多內(nèi)存來(lái)執(zhí)行“額外”的程序。在最近的兩年里,內(nèi)存的價(jià)格已經(jīng)達(dá)到了非常低的水平。設(shè)備制造商們有足夠的能力壓低價(jià)格來(lái)包含更多的內(nèi)存。很多的現(xiàn)在的手機(jī)標(biāo)準(zhǔn)內(nèi)存已經(jīng)超過(guò)了90年代中期電腦內(nèi)存。于是,現(xiàn)在我們有需求,而且有內(nèi)存。我們可以直接跳到為手機(jī)開發(fā)酷的應(yīng)用程序了,對(duì)嗎?不完全是這樣。設(shè)備的制造商們?nèi)匀痪o密的保護(hù)他們的操作系統(tǒng)。有一些在手機(jī)上開放JAVA為基礎(chǔ)的小運(yùn)行環(huán)境。更多的是不允許。即使允許運(yùn)行JAVA應(yīng)用程序但還是不允許進(jìn)入核心的系統(tǒng)。而這些是桌面開發(fā)者習(xí)慣于擁有的。1.3開放手機(jī)聯(lián)盟和Android這個(gè)對(duì)于應(yīng)用程序開發(fā)的障礙開始在2007年的11月份被打破,當(dāng)Google在開放手機(jī)聯(lián)盟下發(fā)布Android。開放手機(jī)聯(lián)盟是一個(gè)硬件和軟件開發(fā)者的集合,包括谷歌,NTTDoCoMo,SprintNextel和HTC。他們的目標(biāo)是創(chuàng)建一個(gè)更多的開放手機(jī)環(huán)境。在開放聯(lián)盟第一個(gè)被發(fā)布的產(chǎn)品就是移動(dòng)設(shè)備操作系統(tǒng)Android。對(duì)于這個(gè)Android的發(fā)布,谷歌使很多開發(fā)工具和向?qū)С蔀榭赡軄?lái)幫助在新系統(tǒng)上可能的開發(fā)者。幫助系統(tǒng),平臺(tái)軟件開發(fā)包(SDK),甚至一個(gè)開發(fā)者的論壇,可以在谷歌的Android的網(wǎng)站上找到,這個(gè)網(wǎng)站應(yīng)該是你的起點(diǎn),而且我極度推薦你去訪問。注解:谷歌為了推動(dòng)這個(gè)新的Android操作系統(tǒng),甚至為尋找新的Android程序而設(shè)立了1000萬(wàn)美元的獎(jiǎng)金。當(dāng)手機(jī)運(yùn)行Linux,Windows或者即使PalmOS的手機(jī)是很容易找到,如本文所述,沒有硬件平臺(tái)已經(jīng)宣告可以來(lái)運(yùn)行Android.HTC,LG電子,摩托羅拉和三星都是開發(fā)手機(jī)成員,在Android的發(fā)布下,我們希望在不久的將來(lái)有一些Android為基的設(shè)備。在2007年11月發(fā)布時(shí),系統(tǒng)自身還仍舊是一個(gè)測(cè)試版的程序。這是個(gè)對(duì)開發(fā)者的好新聞因?yàn)樗o了我們一個(gè)罕見的提前看到將來(lái)的設(shè)備和有機(jī)會(huì)來(lái)開始開發(fā)應(yīng)用程序,而當(dāng)硬件發(fā)布時(shí)就可以運(yùn)行。注解:這個(gè)策略明確的給了開放手機(jī)聯(lián)盟一個(gè)大的優(yōu)勢(shì),超越其它手機(jī)操作系統(tǒng)開發(fā)者。因?yàn)楫?dāng)?shù)谝淮O(shè)備發(fā)布時(shí)會(huì)有數(shù)不盡的可用開發(fā)程序可以運(yùn)行。1.4介紹AndroidAndroid,作為一個(gè)系統(tǒng),是一個(gè)運(yùn)行在Linux2.6核心上的JAVA基礎(chǔ)的操作系統(tǒng)。系統(tǒng)是非常輕量型的而且全特性。Android應(yīng)用程序用JAVA開發(fā)而且很容易被放置到新的平臺(tái)上。如果你沒有下載JAVA或者不確定那一個(gè)版本你需要,我在第二章詳細(xì)列出了開發(fā)環(huán)境的安裝。其他Android的特點(diǎn)包括一個(gè)加速3-D圖形引擎(基于硬件支持),被SQLite推動(dòng)的數(shù)據(jù)庫(kù)支持,和一個(gè)完整的網(wǎng)頁(yè)瀏覽器。如果你熟悉JAVA編程或者是任何種類的OOP開發(fā)者,你可能使用程序用戶接口(UI)開發(fā)-那就是,UI安置是直接在程序代碼中有句柄的。Android,識(shí)別并許可UI開發(fā),而且支持新生,XML為基礎(chǔ)的UI布局。XMLUI布局對(duì)普通桌面開發(fā)者是一個(gè)非常新的概念。我會(huì)在本書的相關(guān)章節(jié)里描述XMLUI布局和程序化UI開發(fā)。Android另一個(gè)更令人激動(dòng)和關(guān)注的特點(diǎn)是因?yàn)樗臉邮?,第三方?yīng)用程序包括“自制的”會(huì)和系統(tǒng)捆綁的有著同樣的優(yōu)先權(quán)。這是和大多數(shù)系統(tǒng)不同之處,但是給了嵌入式系統(tǒng)程序一個(gè)比由第三方開發(fā)者創(chuàng)建的線性優(yōu)先權(quán)大的優(yōu)先執(zhí)行權(quán)。而且,每一個(gè)應(yīng)用程序在虛擬計(jì)算機(jī)上以一個(gè)非常輕量的方式按照自己的線路執(zhí)行。除了大量的SDK和成型的類庫(kù)可以用之外,對(duì)激動(dòng)人心的特性對(duì)于Android的開發(fā)者來(lái)說(shuō)是我們現(xiàn)在可以進(jìn)入到操作系統(tǒng)可以進(jìn)入的地方。也就是說(shuō),如果你要?jiǎng)?chuàng)建一個(gè)應(yīng)用程序打一個(gè)電話,你已經(jīng)進(jìn)入到電話的撥號(hào)盤。加入你要?jiǎng)?chuàng)建一個(gè)應(yīng)用程序來(lái)使用電話內(nèi)部的GPS(如果安裝了),你已經(jīng)進(jìn)入了。對(duì)于開發(fā)者創(chuàng)建動(dòng)態(tài)和令人好奇的程序已經(jīng)敞開大門。Android的一些特征和上面這些可用的特點(diǎn)相同,谷歌已經(jīng)非常迫切的奉送一些特性。Android的開發(fā)者可以將自己的應(yīng)用程序和谷歌提供的如谷歌地圖和無(wú)所不在的谷歌搜索綁在一起。假設(shè)你要寫程序在谷歌地圖上顯示一個(gè)來(lái)電話者的的位置,或者你要儲(chǔ)存一般的搜索結(jié)果到你的聯(lián)系人中。在Android中,這個(gè)門已經(jīng)完全打開。2應(yīng)用程序:HelloWorld2.1主要技巧和思想● 創(chuàng)建新的Android項(xiàng)目● 用View工作● 用一個(gè)TextView● 修改main.xml文件● 在Android虛擬機(jī)上運(yùn)行一個(gè)應(yīng)用程序在這一章中,你將創(chuàng)建你的第一個(gè)Android活動(dòng),這一章從頭到尾的檢查應(yīng)用程序的創(chuàng)建過(guò)程,我將給你們演示怎么去創(chuàng)建一個(gè)Android項(xiàng)目在Eclipese,在最初的文件里添加代碼,并且在Android虛擬機(jī)上運(yùn)行最終的應(yīng)用程序,在Android環(huán)境下運(yùn)行的最終結(jié)果的應(yīng)用將是一個(gè)完全的功能項(xiàng)目實(shí)際上,當(dāng)你看到這一章,你將不止創(chuàng)建一個(gè)Android的活動(dòng),在計(jì)算機(jī)編程的傳統(tǒng)規(guī)定中,你的第一個(gè)應(yīng)用將是典型的HelloWorld!應(yīng)用程序,所以在第一節(jié)的內(nèi)容中你將創(chuàng)建一個(gè)標(biāo)準(zhǔn)的HelloWorld!應(yīng)用程序,僅僅使用一個(gè)空白的背景和一個(gè)“HelloWorld!”文本。然后,為了讓您更好的了解該語(yǔ)言,下一節(jié)詳細(xì)的解釋Android為了你的HelloWorld!應(yīng)用程序自動(dòng)的產(chǎn)生文件。在這個(gè)活動(dòng)中你將創(chuàng)建兩個(gè)重復(fù)的過(guò)程,每一個(gè)都是使用不同技術(shù)信息顯示在屏幕上,而且你建創(chuàng)建兩個(gè)不同版本的HelloWorld!應(yīng)用程序?qū)⒄故尽癏elloWorld!”信息的畫面,這將給你一個(gè)很好的介紹關(guān)于Android的控制和內(nèi)部的工作。注解:你將經(jīng)常看到“application”和“Activity”相互交換著應(yīng)用,他們兩個(gè)之間的不同就是應(yīng)用程序可以有多個(gè)活動(dòng),但是一個(gè)應(yīng)用程序必須至少有一個(gè)活動(dòng)。你的應(yīng)用程序的每一個(gè)窗口或者是屏幕就是一個(gè)分開的活動(dòng)。因此,如果你創(chuàng)建了一個(gè)相當(dāng)簡(jiǎn)單的應(yīng)用程序僅僅使用了一個(gè)屏幕的數(shù)據(jù)(就像在這一章中的HelloWorld!應(yīng)用程序),那就只有一個(gè)活動(dòng),在后來(lái)的章節(jié)里面你將創(chuàng)建許許多多的活動(dòng)。為了確保你可以完全很好的看到Android程序的整體,在第六章你將在Android軟件開發(fā)包命令行編譯在微軟windows和Linux環(huán)境下同時(shí)創(chuàng)建這些應(yīng)用程序。換句話說(shuō)在這一章中包含了在Eclipse環(huán)境下創(chuàng)建項(xiàng)目的全過(guò)程。第六章也包含了利用命令行編譯工具創(chuàng)建項(xiàng)目的過(guò)程。因此,在繼續(xù)學(xué)習(xí)之前,你應(yīng)當(dāng)檢查你的Eclipse環(huán)境是否配置的正確。復(fù)習(xí)第三章中為Android開發(fā)包配置PATH變量的步驟,你也應(yīng)當(dāng)確保你的JRE中的PATH變量是否正確。忠告:如果你還有任何配置相關(guān)的問題的話,你可以去看第二章和第三章的內(nèi)容,或者是看看Android開發(fā)包的文檔。2.2在Eclipse上創(chuàng)建你的第一個(gè)Android項(xiàng)目為了開始你的第一個(gè)Android項(xiàng)目,打開Eclipse。當(dāng)你第一次打開Eclipse的時(shí)候,它會(huì)打開一個(gè)空的開發(fā)環(huán)境,那就是你開始的地方。你的第一個(gè)任務(wù)就是為你的應(yīng)用程序建立和命名你的工作區(qū),選擇→文件→新建→Android項(xiàng)目,這就是你運(yùn)行新的Android項(xiàng)目的向?qū)?。警告:在新建?xiàng)目菜單中不能選擇java項(xiàng)目。但是Android應(yīng)用程序就是用java語(yǔ)言寫的,跟你所做的所有的java工程,這個(gè)建議將創(chuàng)建一個(gè)標(biāo)準(zhǔn)的Java應(yīng)用程序,選擇Android項(xiàng)目就是讓你創(chuàng)建一個(gè)Android特有的應(yīng)用程序。2.3新的Android項(xiàng)目向?qū)槟銣?zhǔn)備了兩件事情一個(gè)綁住Android開發(fā)包的殼程序。這個(gè)將允許你使用所有Android庫(kù)和包來(lái)進(jìn)行編碼工作,并且允許你在合適的環(huán)境中調(diào)試程序。新程序的第一個(gè)殼文件。這些殼文件包含一些必要的支撐你將要編寫程序的文件。就如同一個(gè)在VisualStudio中,它會(huì)在你的文件中產(chǎn)生的一些代碼。使用Eclipse中的Android項(xiàng)目向?qū)Мa(chǎn)生一些初始的程序文件和一些Android創(chuàng)建的代碼。另外,新的Android項(xiàng)目向?qū)н€包含一些選項(xiàng),顯示你必須為你的Android項(xiàng)目啟動(dòng)設(shè)置的東西。在項(xiàng)目的名稱那個(gè)字段,只是為了舉例,使用HelloWorld!Text這個(gè)名字,這個(gè)名字非常的容易把這個(gè)HelloWorld!項(xiàng)目從其它你將要在本章中創(chuàng)建的項(xiàng)目分別開。在內(nèi)容那個(gè)區(qū)域,保持系統(tǒng)默認(rèn)的選擇:在工作區(qū)中創(chuàng)建一個(gè)新的項(xiàng)目這個(gè)選項(xiàng)按鈕必須被選中。并且使用系統(tǒng)默認(rèn)的位置這個(gè)選擇框也應(yīng)當(dāng)被選中。這個(gè)將允許Eclipse在你系統(tǒng)默認(rèn)的工作區(qū)路徑中創(chuàng)建你的項(xiàng)目。這樣做的好處是十分容易對(duì)你的項(xiàng)目進(jìn)行排序,管理和查找。例如,如果你在工作在一個(gè)Unix基礎(chǔ)的開發(fā)環(huán)境中,這個(gè)路徑指向Home路徑。如果你工作在一個(gè)Windows的環(huán)境中,工作路徑將會(huì)是C:/Users/<username>/workspace。然而,不管任何一些原因,你可能需要選中系統(tǒng)默認(rèn)位置的選擇框并且選擇一個(gè)其它的路徑。如果是這樣的話,不管那個(gè)位置的選項(xiàng),自己選一個(gè)好了。例如,你可能希望將你在這本書中的項(xiàng)目保存在一個(gè)不同的位置跟其他你自己創(chuàng)建的項(xiàng)目分開。如果如此,簡(jiǎn)單的覆蓋位置,你自己可以自訂一個(gè)位置目錄給這個(gè)項(xiàng)目。3應(yīng)用程序基礎(chǔ)Android應(yīng)用程序是用Java程序語(yǔ)言寫的。AndroidSDK工具編譯代碼后,把它和其他數(shù)據(jù)和資源文件一起打包到一個(gè)Android包中,這個(gè)存檔文件使用.apk作為后綴。很多時(shí)候,每一個(gè)android應(yīng)用程序都只存在于自己的世界:●默認(rèn)情況下,每一個(gè)的應(yīng)用程序都運(yùn)行在自己的Linux進(jìn)程中。當(dāng)android啟動(dòng)進(jìn)程時(shí),應(yīng)用程序的組件就需要被執(zhí)行。然后當(dāng)不需要或系統(tǒng)必須為其他應(yīng)用程序恢復(fù)記憶時(shí)再關(guān)閉進(jìn)程?!衩恳粋€(gè)進(jìn)程都有自己的虛擬機(jī),因此應(yīng)用程序的代碼可以獨(dú)立于其他應(yīng)用程序的代碼而運(yùn)行?!裣到y(tǒng)默認(rèn)地分配給每個(gè)應(yīng)用程序一個(gè)唯一的Linux用戶ID,權(quán)限被設(shè)置以致于應(yīng)用程序的文件僅僅被用戶和應(yīng)用程序自己可以看到雖然有方法導(dǎo)出到其他應(yīng)用程序。它可以讓兩個(gè)應(yīng)用程序共享相同的Linux用戶ID;在這種情況下,它們可以互相訪問對(duì)方的文件。為了節(jié)省系統(tǒng)資源,具有相同用戶ID的應(yīng)用程序也能夠運(yùn)行在同樣的Linux進(jìn)程中,同時(shí)也能夠分享共同的VM中。3.1應(yīng)用程序組件Android的一個(gè)核心特性就是一個(gè)應(yīng)用程序可以使用其它應(yīng)用程序的元素(前提是那些應(yīng)用程序允許提供)。例如,如果你的應(yīng)用程序需要展示一個(gè)圖片卷動(dòng)列表,而另一個(gè)應(yīng)用程序已經(jīng)開發(fā)了一個(gè)合用的照片卷軸而別的應(yīng)用程序也可以使用的話,你可以直接調(diào)用那個(gè)卷軸來(lái)完成工作,而不用你自己再開發(fā)。你的應(yīng)用程序并沒有吸納其它應(yīng)(1)Activityactivity是為用戶操作而提供的可視化用戶界面。例如,一個(gè)activity可以提供一個(gè)菜單項(xiàng)列表供用戶選擇,或者可以把一些圖片連同它們的標(biāo)題一起顯示。一個(gè)文本消息傳遞應(yīng)用程序可能會(huì)有一個(gè)用于顯示要發(fā)送消息到的聯(lián)系人列表的activity第二個(gè)activity用來(lái)寫消息來(lái)選擇聯(lián)系人。另一個(gè)activity用來(lái)查閱以前的短信或改變?cè)O(shè)置。盡管它們一起組成一個(gè)內(nèi)聚的用戶界面,但每個(gè)activity都保持相互獨(dú)立。每一個(gè)都實(shí)現(xiàn)以Activity類為基類的子類。一個(gè)應(yīng)用程序可能只有一個(gè)activity,或者,如剛才提到的文本消息應(yīng)用程序那樣,包含很多個(gè)。每個(gè)activity的作用是什么,以及多少個(gè)activity,當(dāng)然是取決于應(yīng)用程序的設(shè)計(jì)。一般情況下,第一個(gè)被標(biāo)記的activity在應(yīng)用程序啟動(dòng)的時(shí)呈現(xiàn)給用戶。從一個(gè)activity轉(zhuǎn)向另一個(gè)靠的是用當(dāng)前的activity啟動(dòng)下一個(gè)來(lái)完成的。每個(gè)activity都被給予一個(gè)默認(rèn)的窗口來(lái)進(jìn)行繪制。通常情況下,這個(gè)窗口是滿屏的,但它也可以是一個(gè)比屏幕小的位于其它窗口之上的浮動(dòng)的窗口。一個(gè)activity也可以使用附加的窗口——例如,一個(gè)在activity運(yùn)行過(guò)程中彈出的要求用戶響應(yīng)的對(duì)話框,或者屏幕上有特殊選項(xiàng)供用戶選擇的顯示必要信息的一個(gè)窗口。窗口的可視內(nèi)容是由一系列層次化view構(gòu)成的,基本視圖類派生的對(duì)象。每個(gè)view控制著窗口中一塊特定的矩形區(qū)域。父級(jí)views包含并組織其子類view的布局。葉節(jié)點(diǎn)view(位于層次結(jié)構(gòu)最底端)在它們控制的矩形區(qū)域進(jìn)行繪制,并對(duì)用戶直達(dá)其區(qū)域的操作作出響應(yīng)。因此,view是activity與用戶進(jìn)行交互的界面。例如,view可以顯示一個(gè)小圖片,并在用戶點(diǎn)擊它的時(shí)候產(chǎn)生動(dòng)作。Android有很多現(xiàn)成的視圖供開發(fā)者使用——包括按鈕、文本域、滾動(dòng)條、菜單、復(fù)選框等等。視圖的層次結(jié)構(gòu)是由Activity.setContentView()方法放入activity的窗口之中的。contentview是位于層次結(jié)構(gòu)根位置的View對(duì)象。(更多信息,請(qǐng)參考單獨(dú)的用戶界面文檔視圖和層次結(jié)構(gòu)。)(2)Serviceservice沒有可視化的用戶界面,而是無(wú)限期在后臺(tái)運(yùn)行。例如,一個(gè)service可以在用戶做其它事情的時(shí)候播放背景音樂、從網(wǎng)絡(luò)上獲取數(shù)據(jù)或者計(jì)算一些東西并提供運(yùn)算結(jié)果給activity使用。每個(gè)service都繼承Service基類。一個(gè)典型例子是媒體播放器播放來(lái)自播放列表中的歌曲。播放器應(yīng)用程序可能有一個(gè)或多個(gè)activity來(lái)給用戶去選擇歌曲并進(jìn)行播放。然而,音樂播放這個(gè)任務(wù)本身不應(yīng)該由任何activity來(lái)處理,因?yàn)橛脩粝M词乖谒麄冸x開播放器開始做別的事情時(shí),音樂仍然在繼續(xù)播放。為達(dá)到這個(gè)目的,媒體播放器activity可以啟動(dòng)一個(gè)運(yùn)行在后臺(tái)的service服務(wù)。系統(tǒng)仍維持音樂播放的service的運(yùn)行,即使這個(gè)activity已經(jīng)離開屏幕。連接至(綁定)一個(gè)正在運(yùn)行的service(如果service沒有運(yùn)行,則啟動(dòng))是可能的。連接后,你可以通過(guò)一個(gè)接口與service進(jìn)行通訊。對(duì)于音樂service來(lái)說(shuō),這個(gè)接口可以允許用戶暫停、回退、停止以及恢復(fù)播放。如同activity和其它的組件一樣,service服務(wù)運(yùn)行在應(yīng)用程序進(jìn)程的主線程內(nèi)。所以它不會(huì)對(duì)其它組件或者用戶界面有任何的阻礙作用,它們一般會(huì)派生一個(gè)新線程來(lái)執(zhí)行一些時(shí)間消耗型任務(wù)(比如音樂回放和網(wǎng)絡(luò)下載)。參見稍后的進(jìn)程和線程介紹。(3)BroadcastReceiverbroadcastreceiver是一個(gè)與注于接收廣播通知信息并做出處理的組件。很多廣播是由系統(tǒng)代碼產(chǎn)生——例如,通知時(shí)區(qū)改變、電池電量低、拍攝了一張照片或用戶改變了語(yǔ)言選項(xiàng)。應(yīng)用程序也可發(fā)起廣播——例如,通知其它應(yīng)用程序一些數(shù)據(jù)已經(jīng)下載到設(shè)備并處于可用狀態(tài)。一個(gè)應(yīng)用程序可以擁有任意數(shù)量的broadcastreceiver,以對(duì)任何它認(rèn)為重要的通知信息作出各種響應(yīng)。所有的receiver都繼承自BroadcastReceiver基類。broadcastreceiver沒有顯示用戶界面。然而,它們可以啟動(dòng)一個(gè)activity或者service來(lái)對(duì)它們收到的信息做出響應(yīng),或者也可以使用NotificationManager來(lái)通知用戶。通知可以用多種方式來(lái)獲取用戶的注意力──閃動(dòng)背光燈、震動(dòng)設(shè)備、播放聲音等等。通知一般是在狀態(tài)欄上放一個(gè)持續(xù)的圖標(biāo),用戶可以點(diǎn)擊打開它并獲取消息。(4)Contentprovidercontentprovider將一些特定應(yīng)用程序數(shù)據(jù)提供給其它應(yīng)用程序使用處理。數(shù)據(jù)可以存儲(chǔ)在文件系統(tǒng)、SQLite數(shù)據(jù)庫(kù)或其它任何有意義的方式。contentprovider繼承于ContentProvider基類,實(shí)現(xiàn)了使得其他應(yīng)用程序能夠檢索和存儲(chǔ)它所管理的類型數(shù)據(jù)的標(biāo)準(zhǔn)方法。然而,應(yīng)用程序并不能直接調(diào)用方法,而是使用一個(gè)ContentResolver對(duì)象,來(lái)代替調(diào)用它的方法。ContentResolver可以與任何的contentprovider進(jìn)行交互;與其合作對(duì)任何相關(guān)的進(jìn)程間通訊進(jìn)行管理。參閱獨(dú)立的ContentProviders文檔,以獲得更多的關(guān)于使用contentprovider的信息。每當(dāng)出現(xiàn)一個(gè)需要被特定組件處理的請(qǐng)求時(shí),Android會(huì)確保該組件的應(yīng)用程序進(jìn)程處于運(yùn)行狀態(tài),必要時(shí)啟動(dòng)它,并確保那個(gè)組件的一個(gè)合適的實(shí)例可用,必要時(shí)創(chuàng)建那個(gè)實(shí)例。3.2激活組件:intent當(dāng)接收到ContentResolver發(fā)出的請(qǐng)求后,contentprovider就會(huì)被激活。而其它三種組件——activity、service和broadcastreceiver,被一種叫做intent的異步消息所激活。intent是一個(gè)保存消息內(nèi)容的Intent對(duì)象。對(duì)于activity和service來(lái)說(shuō),它指明了被請(qǐng)求的操作名稱,并指定了用來(lái)操作的數(shù)據(jù)的URI和其它一些事情。例如,它可以傳達(dá)一個(gè)請(qǐng)求讓它為用戶顯示一張圖片,或者讓用戶編輯一些文本的activity。對(duì)于broadcastreceiver來(lái)說(shuō),Intent對(duì)象指明了被通報(bào)的操作。例如,它可以對(duì)所有感興趣的對(duì)象通報(bào)照相按鈕被按下。對(duì)于每種組件來(lái)說(shuō),激活的方法也不同:(1)一activity通過(guò)IntentContext.startActivity()或者Activity.startActivityForResult來(lái)啟動(dòng)(或指定新的東西)另外一個(gè)activity。響應(yīng)的activity可以通過(guò)調(diào)用自身的getIntent()方法來(lái)查看并且激活它的intent。Android通過(guò)調(diào)用activity的onNewIntent()方法來(lái)傳遞給它隨后的任何intent。一個(gè)activity經(jīng)常啟動(dòng)另一個(gè)activity。如果它期望所啟動(dòng)的那個(gè)activity返回一個(gè)結(jié)果,它會(huì)調(diào)用startActivityForResult()而不是startActivity()。例如,如果它啟動(dòng)一個(gè)activity以使用戶挑選一張照片,它可能會(huì)返回被選中的照片。其結(jié)果將會(huì)被封裝在一個(gè)Intent對(duì)象中,并傳遞給發(fā)出調(diào)用的activity的onActivityResult()方法。(2)通過(guò)一個(gè)意圖對(duì)象Context.startService()以啟動(dòng)一個(gè)service(或給出新的指令進(jìn)行服務(wù))。Android調(diào)用此service的onStart()方法并將Intent對(duì)象傳遞給它。與此類似,一個(gè)intent可以被傳遞給Context.bindService()建立一個(gè)處于調(diào)用組件和目標(biāo)service中間的活動(dòng)連接。service通過(guò)onBind()方法的調(diào)用來(lái)獲取此Intent對(duì)象(如果此service未運(yùn)行,bindService()會(huì)先啟動(dòng)它)。例如,一個(gè)activity可以建立一個(gè)不前述的音樂回放service的聯(lián)系,這樣它就可以提供給用戶一些途徑(用戶界面)來(lái)控制回放。這個(gè)activity可以調(diào)用bindService()來(lái)建立此連接,然后調(diào)用service中定之的方法來(lái)控制回放。稍后,遠(yuǎn)程方法調(diào)用一節(jié)有關(guān)于如何綁定至一個(gè)service的細(xì)節(jié)內(nèi)容。(3)應(yīng)用程序能夠通過(guò)傳遞一個(gè)Intent對(duì)象至Context.sendBroadcast(),Context.sendOrderedBroadcast(),以及Context.sendStickyBroadcast()和其它相似方法來(lái)發(fā)起一個(gè)廣播。Android通過(guò)調(diào)用它們的onReceive()方法來(lái)提供intent給所有它們所感興趣的廣播接收器。更多的intent信息,和看獨(dú)立的文章,intent和intent過(guò)濾器.3.3關(guān)閉組件一個(gè)內(nèi)容提供者僅在響應(yīng)來(lái)自ContentResolver的請(qǐng)求時(shí)處于活躍狀態(tài)。而廣播接收器僅在響應(yīng)一條廣播信息的時(shí)候處于各種活動(dòng)狀態(tài)。所以沒必要去顯式地關(guān)閉這組件。而activity則不同,它提供用戶界面。只要會(huì)話依然持續(xù),無(wú)論會(huì)話過(guò)程有無(wú)空閑,activity同用戶進(jìn)行長(zhǎng)時(shí)間會(huì)話且可能一直處于活動(dòng)狀態(tài)。與此相似,service也會(huì)在很長(zhǎng)一段時(shí)間內(nèi)在后臺(tái)運(yùn)行。所以Android為關(guān)閉activity和service提供了一個(gè)有序的方法。activity可以通過(guò)調(diào)用自身finish()方法來(lái)關(guān)閉。一個(gè)activity可以通過(guò)調(diào)用finishActivity()方法來(lái)關(guān)閉另一個(gè)activity(通過(guò)調(diào)用finishActivity()來(lái)啟動(dòng)startActivityForResult()的那個(gè))。service可以通過(guò)調(diào)用自身的stopSelf()方法,或調(diào)用Context.stopService()方法來(lái)停止。在組件長(zhǎng)時(shí)間不被使用時(shí)或者當(dāng)Android必須為更多的活動(dòng)組件回收內(nèi)存時(shí)系統(tǒng)會(huì)關(guān)閉它。稍后,組件的生命的周期一節(jié),將對(duì)這種可能性及結(jié)果進(jìn)行更詳細(xì)的討論。3.4manifest文件在Android啟動(dòng)一個(gè)應(yīng)用程序組件之前,它必須知道哪個(gè)組件是存在的。因此,應(yīng)用程序會(huì)在manifest文件中聲明一個(gè)被打包到android包中的組件,.apk文件還將涵蓋應(yīng)用程序的代碼、文件以及資源。manifest文件是一個(gè)結(jié)構(gòu)化的XML文件,通常會(huì)被所有應(yīng)用程序命名為AndroidManifest.xml。除了聲明此應(yīng)用程序各個(gè)組件,它還會(huì)做很多其他事情,比如指明應(yīng)用程序所需鏈接到的庫(kù)名(除了默認(rèn)的Android庫(kù))以及標(biāo)出應(yīng)用程序期望獲得的其他權(quán)限。但manifest文件最重要的任務(wù)是向Android報(bào)告這個(gè)應(yīng)用程序的各個(gè)組件。例如,一個(gè)activity可能聲明如下:<activity>元素的name屬性指定了實(shí)現(xiàn)這個(gè)activity的Activity子類。icon和label屬性指向包含展示給用戶去描繪此activity的icon和label的資源文件。其它組件也以類似的方式去聲明——用<service>元素聲明service,<receiver>元素聲明broadcastreceiver,而<provider>元素聲明contentprovider。在manifest文件中,activity、service以及contentprovider將不被聲明,因?yàn)樗鼈儾粸橄到y(tǒng)所見,從而也就永不會(huì)被運(yùn)行。然而,廣播接收器既可以在manifest文件中聲明,也能夠在代碼中動(dòng)態(tài)創(chuàng)建(為BroadcastReceiver的對(duì)象),并以調(diào)用Context.registerReceiver()的方式被系統(tǒng)注冊(cè)。3.5Intent過(guò)濾器一個(gè)Intent對(duì)象可以顯式地指定一個(gè)目標(biāo)組件。如果進(jìn)行了返種指定,Android就會(huì)找到這個(gè)組件(基于manifest文件的聲明)并激活它。但如果沒有顯式地指定一個(gè)目標(biāo),Android就必須找到最合適的組件來(lái)響應(yīng)這個(gè)intent。它是通過(guò)比較Intent對(duì)象和潛在目標(biāo)的intent過(guò)濾器來(lái)完成的。一個(gè)組件的intent過(guò)濾器會(huì)通知Android它所能處理的intent類型。如組件的其它必要信息一樣,它們是在manifest文件中聲明的。這里有一個(gè)對(duì)先前例子的擴(kuò)展,其中加入了兩個(gè)針對(duì)activity的intent過(guò)濾器:示例中的第一個(gè)過(guò)濾器——action“ent.action.MAIN”和category“ent.category.LAUNCHER”的組合——是常見的一個(gè)。它標(biāo)明了此activity應(yīng)該在應(yīng)用程序啟動(dòng)器中顯示,就是用戶在屏幕上看到的此設(shè)備上可供啟動(dòng)的應(yīng)用程序的列表。換句話說(shuō),這個(gè)activity是應(yīng)用程序的入口點(diǎn),是用戶在啟動(dòng)器中選擇運(yùn)行這個(gè)應(yīng)用程序后所見到的第一個(gè)activity。第二個(gè)過(guò)濾器聲明了這個(gè)activity能夠在一種特定類型的數(shù)據(jù)上可以執(zhí)行的操作。一個(gè)組件可以擁有任意數(shù)量的intent過(guò)濾器,每個(gè)都聲明了一個(gè)不同的功能設(shè)置。如果組件沒有包含任何過(guò)濾器,它只能被顯式地指明作為目標(biāo)組件的intent激活。對(duì)于在代碼中創(chuàng)建并注冊(cè)的廣播接收器來(lái)說(shuō),intent過(guò)濾器將被直接實(shí)例化為IntentFilter對(duì)象。其它所有的過(guò)濾器都被設(shè)置在manifest文件中。3.6基于XML的布局雖然純粹地在技術(shù)上通過(guò)Java代碼在activity上創(chuàng)建和添加部件是可行的,我們?cè)诘?章中做的方式一樣,更常見的方法是用一種基于XML的布局文件。部件的實(shí)例保留更多,情況復(fù)雜,小工具在編譯時(shí)不為人所知(例如,在數(shù)據(jù)檢索了互聯(lián)網(wǎng)基礎(chǔ)上將單選按鈕填充柱??紤]到這一點(diǎn),現(xiàn)在是時(shí)候打破XML和學(xué)習(xí)如何用此種方式來(lái)布置Androidactivities。正如其名稱所示,一個(gè)基于XML的布局是一個(gè)關(guān)系到每個(gè)規(guī)格的小部件,和他們的容器(更多關(guān)于這些內(nèi)容的在第7章)編碼的XML格式。具體來(lái)說(shuō),Android認(rèn)為基于XML的布局是資源,因此布局的文件在你的android項(xiàng)目中存儲(chǔ)在res/layout目錄。每個(gè)XML文件包含一個(gè)指定的部件和容器布局元素樹,一種意見認(rèn)為構(gòu)成層次。對(duì)XML元素的屬性,描述一個(gè)部件應(yīng)如何看或一個(gè)容器如何運(yùn)轉(zhuǎn)。例如,如果一個(gè)按鈕元素有一個(gè)android的屬性值:文字樣式=“bold”,這意味著該文本出現(xiàn)在按鈕的表面應(yīng)該是呈現(xiàn)一個(gè)粗體字體樣式.Android的SDK附帶有一個(gè)使用的布局的工具(aapt)。這個(gè)工具應(yīng)自動(dòng)調(diào)用你的Android工具鏈(例如,Eclipse中,Ant’sbuild.xml)。作為一個(gè)開發(fā)人員,特別重要的是在您的項(xiàng)目中aapt生成R.java源文件,讓你能在那些布局中直接從Java代碼中獲取布局和部件。XML作為一個(gè)GUI定義格式變得越來(lái)越流行普遍。微軟的XAML2,Adobe的Flex3,和Mozilla的XUL4都采用了和Android類似的方法:把布局細(xì)節(jié)放在一個(gè)XML文件和把程序指揮資料放在源文件(如XUL中的JavaScript)。許多不太知名的圖形用戶界面框架,如ZK5,還使用用視圖定義的XML。雖然“隨大流”未必是最好的政策,但他們有優(yōu)勢(shì)幫助從任何其他XML為中心的觀點(diǎn)描述語(yǔ)言輕松進(jìn)入Android。原文:Android:AProgrammer’sGuide1WhatIsAndroid1.1KeySkills&Concepts●Historyofembeddeddeviceprogramming●ExplanationofOpenHandsetAlliance●FirstlookattheAndroidhomescreenItcanbesaidthat,forawhile,traditionaldesktopapplicationdevelopershavebeenspoiled.Thisisnottosaythattraditionaldesktopapplicationdevelopmentiseasierthanotherformsofdevelopment.However,astraditionaldesktopapplicationdevelopers,wehavehadtheabilitytocreatealmostanykindofapplicationwecanimagine.IamincludingmyselfinthisgroupingbecauseIgotmystartindesktopprogramming.Oneaspectthathasmadedesktopprogrammingmoreaccessibleisthatwehavehadtheabilitytointeractwiththedesktopoperatingsystem,andthusinteractwithanyunderlyinghardware,prettyfreely(oratleastwithminimalexceptions).Thiskindoffreedomtoprogramindependently,however,hasneverreallybeenavailabletothesmallgroupofprogrammerswhodaredtoventureintothemurkywatersofcellphonedevelopment.NOTE:Irefertotwodifferentkindsofdevelopersinthisdiscussion:traditionaldesktopapplicationdevelopers,whoworkinalmostanylanguageandwhoseendproduct,applications,arebuilttorunonany“desktop”operatingsystem;andAndroiddevelopers,JavadeveloperswhodevelopfortheAndroidplatform.Thisisnotforthepurposesofsayingoneisbyanymeansbetterorworsethantheother.Rather,thedistinctionismadeforpurposesofcomparingthedevelopmentstylesandtoolsofdesktop
operating
system
environments
to
the
mobile
operating
system
environment1.2BriefHistoryofEmbeddedDeviceProgrammingForalongtime,cellphonedeveloperscomprisedasmallsectofaslightlylargergroupofdevelopersknownasembeddeddevicedevelopers.Seenasaless“glamorous”siblingtodesktop—andlaterweb—development,embeddeddevicedevelopmenttypicallygottheproverbialshortendofthestickasfarashardwareandoperatingsystemfeatures,becauseembeddeddevicemanufacturerswerenotoriouslystingyonfeaturesupport.Embeddeddevicemanufacturerstypicallyneededtoguardtheirhardwaresecretsclosely,sotheygaveembeddeddevicedevelopersfewlibrariestocallwhentryingtointeractwithaspecificdevice.Embeddeddevicesdifferfromdesktopsinthatanembeddeddeviceistypicallya“computeronachip.”Forexample,consideryourstandardtelevisionremotecontrol;itisnotreallyseenasanoverwhelmingachievementoftechnologicalcomplexity.Whenanybuttonispressed,achipinterpretsthesignalinawaythathasbeenprogrammedintothedevice.Thisallowsthedevicetoknowwhattoexpectfromtheinputdevice(keypad),andhowtorespondtothosecommands(forexample,turnonthetelevision).Thisisasimpleformofembeddeddeviceprogramming.However,believeitornot,simpledevicessuchasthesearedefinitelyrelatedtotherootsofearlycellphonedevicesanddevelopment.Mostembeddeddevicesran(andinsomecasesstillrun)proprietaryoperatingsystems.Thereasonforchoosingtocreateaproprietaryoperatingsystemratherthanuseanyconsumersystemwasreallyaproductofnecessity.Simpledevicesdidnotneedveryrobustandoptimizedoperatingsystems.Asaproductofdeviceevolution,manyofthemorecomplexembeddeddevices,suchasearlyPDAs,householdsecuritysystems,andGPSs,movedtosomewhatstandardizedoperatingsystemplatformsaboutfiveyearsago.Small-footprintoperatingsystemssuchasLinux,orevenanembeddedversionofMicrosoftWindows,havebecomemoreprevalentonmanyembeddeddevices.Aroundthistimeindeviceevolution,cellphonesbranchedfromotherembeddeddevicesontotheirownpath.Thisbranchingisevidentwhenyouexaminetheirarchitecture.Nearlysincetheirinception,cellphoneshavebeenfringedevicesinsofarastheyrunonproprietarysoftware—softwarethatisownedandcontrolledbythemanufacturer,andisalmostalwaysconsideredtobea“closed”system.Thepracticeofmanufacturersusingproprietaryoperatingsystemsbeganmoreoutofnecessitythananyotherreason.Thatis,cellphonemanufacturerstypicallyusedhardwarethatwascompletelydevelopedin-house,oratleasthardwarethatwasspecificallydevelopedforthepurposesofrunningcellphoneequipment.Asaresult,therewerenoopenlyavailable,off-the-shelfsoftwarepackagesorsolutionsthatwouldreliablyinteractwiththeirhardware.Sincethemanufacturersalsowantedtoguardverycloselytheirhardwaretradesecrets,someofwhichcouldberevealedbyallowingaccesstothesoftwarelevelofthedevice,thecommonpracticewas,andinmostcasesstillis,tousecompletelyproprietaryandclosedsoftwaretoruntheirdevices.Thedownsidetothisisthatanyonewhowantedtodevelopapplicationsforcellphonesneededtohaveintimateknowledgeoftheproprietaryenvironmentwithinwhichitwastorun.Thesolutionwastopurchaseexpensivedevelopmenttoolsdirectlyfromthemanufacturer.Thisisolatedmanyofthe“homebrew”developers.NOTE:Agrowingcultureofhomebrewdevelopershasembracedcellphoneapplicationdevelopment.Theterm“homebrew”referstothefactthatthesedeveloperstypicallydonotworkforacellphonedevelopmentcompanyandgenerallyproducesmall,one-offproductsontheirowntime.Another,morecompelling“necessity”thatkeptcellphonedevelopmentoutofthehandsoftheeverydaydeveloperwasthehardwaremanufacturers’solutiontothe“memoryversusneed”dilemma.Untilrecently,cellphonesdidlittlemorethanexecuteandreceivephonecalls,trackyourcontacts,andpossiblysendandreceiveshorttextmessages;notreallythe“Swissarmyknives”oftechnologytheyaretoday.Evenaslateas2002,cellphoneswithcameraswerenotcommonlyfoundinthehandsofconsumers.By1997,smallapplicationssuchascalculatorsandgames(Tetris,forexample)crepttheirwayontocellphones,buttheoverwhelmingfunctionwasstillthatofaphonedialeritself.Cellphoneshadnotyetbecomethemultiuse,multifunctionpersonaltoolstheyaretoday.NooneyetsawtheneedforInternetbrowsing,MP3playing,oranyofthemultitudesoffunctionsweareaccustomedtousingtoday.Itispossiblethatthecellphonemanufacturersof1997didnotfullyperceivetheneedconsumerswouldhaveforanall-in-onedevice.However,eveniftheneedwaspresent,alackofdevicememoryandstoragecapacitywasanevenbiggerobstacletoovercome.Morepeoplemayhavewantedtheirdevicestobeall-in-onetools,butmanufacturersstillhadtoclimbthememoryhurdle.Toputtheproblemsimply,ittakesmemorytostoreandrunapplicationsonanydevice,cellphonesincluded.Cellphones,asadevice,untilrecentlydidnothavetheamountofmemoryavailabletothemthatwouldfacilitatetheinclusionof“extra”programs.Withinthelasttwoyears,thepriceofmemoryhasreachedverylowlevels.Devicemanufacturersnowhavetheabilitytoincludemorememoryatlowerprices.ManycellphonesnowhavemorestandardmemorythantheaveragePChadinthemid-1990s.So,nowthatwehavetheneed,andthememory,wecanalljumpinanddevelopcoolapplicationsforcellphonesaroundtheworld,right?Notexactly.Devicemanufacturersstillcloselyguardtheoperatingsystemsthatrunontheirdevices.WhileafewhaveopeneduptothepointwheretheywillallowsomeJava-basedapplicationstorunwithinasmallenvironmentonthephone,manydonotallowthis.EventhesystemsthatdoallowsomeJavaappstorundonotallowthekindofaccesstothe“core”systemthatstandarddesktopdevelopersareaccustomedtohaving.1.3OpenHandsetAllianceandAndroidThisbarriertoapplicationdevelopmentbegantocrumbleinNovemberof2007whenGoogle,undertheOpenHandsetAlliance,releasedAndroid.TheOpenHandsetAllianceisagroupofhardwareandsoftwaredevelopers,includingGoogle,NTTDoCoMo,SprintNextel,andHTC,whosegoalistocreateamoreopencellphoneenvironment.Thefirstproducttobereleasedundertheallianceisthemobiledeviceoperatingsystem,Android.WiththereleaseofAndroid,Googlemadeavailableahostofdevelopmenttoolsandtutorialstoaidwould-bedevelopersontothenewsystem.Helpfiles,theplatformsoftwaredevelopmentkit(SDK),andevenadevelopers’communitycanbefoundatGoogle’sAndroidwebsite,Thissiteshouldbeyourstartingpoint,andIhighlyencourageyoutovisitthesite.NOTE:Google,inpromotingthenewAndroidoperatingsystem,evenwentasfarastocreatea$10millioncontestlookingfornewandexcitingAndroidapplications.WhilecellphonesrunningLinux,Windows,andevenPalmOSareeasytofind,asofthiswriting,nohardwareplatformshavebeenannouncedforAndroidtorunon.HTC,LGElectronics,Motorola,andSamsungaremembersoftheOpenHandsetAlliance,underwhichAndroidhasbeenreleased,sowecanonlyhopethattheyhaveplansforafewAndroid-baseddevicesinthenearfuture.WithitsreleaseinNovember2007,thesystemitselfisstillinasoftware-onlybeta.Thisisgoodnewsfordevelopersbecauseitgivesusarareadvancelookatafuturesystemandachancetobegindevelopingapplicationsthatwillrunassoonasthehardwareisreleased.NOTE:ThisstrategyclearlygivestheOpenHandsetAllianceabigadvantageoverothercellphoneoperatingsystemdevelopers,becausetherecouldbeanuncountablenumberofapplicationsavailableimmediatelyforthefirstdevicesreleasedtorunAndroid.IntroductiontoAndroidAndroid,asasystem,isaJava-basedoperatingsystemthatrunsontheLinux2.6kernel.Thesystemisverylightweightandfullfeatured.AndroidapplicationsaredevelopedusingJavaandcanbeportedrathereasilytothenewplatform.IfyouhavenotyetdownloadedJavaorareunsureaboutwhichversionyouneed,IdetailtheinstallationofthedevelopmentenvironmentinChapter2.OtherfeaturesofAndroidincludeanaccelerated3-Dgraphicsengine(basedonhardwaresupport),databasesupportpoweredbySQLite,andanintegratedwebbrowser.IfyouarefamiliarwithJavaprogrammingorareanOOPdeveloperofanysort,youarelikelyusedtoprogrammaticuserinterface(UI)development—thatis,UIplacementwhichishandleddirectlywithintheprogramcode.Android,whilerecognizingandallowingforprogrammaticUIdevelopment,alsosupportsthenewer,XML-basedUIlayout.XMLUIlayoutisafairlynewconcepttotheaveragedesktopdeveloper.IwillcoverboththeXMLUIlayoutandtheprogrammaticUIdevelopmentinthesupportingchaptersofthisbook.OneofthemoreexcitingandcompellingfeaturesofAndroidisthat,becauseofitsarchitecture,third-partyapplications—includingthosethatare“homegrown”—areexecutedwiththesamesystempriorityasthosethatarebundledwiththecoresystem.Thisisamajordeparturefrommostsystems,whichgiveembeddedsystemappsagreaterexecutionprioritythanthethreadpriorityavailabletoappscreatedbythird-partydevelopers.Also,eachapplicationisexecutedwithinitsownthreadusingaverylightweightvirtualmachine.AsidefromtheverygenerousSDKandthewell-formedlibrariesthatareavailabletoustodevelopwith,themostexcitingfeatureforAndroiddevelopersisthatwenowhaveaccesstoanythingtheoperatingsystemhasaccessto.Inotherwords,ifyouwanttocreateanapplicationthatdialsthephone,youhaveaccesstothephone’sdialer;ifyouwanttocreateanapplicationthatutilizesthephone’sinternalGPS(ifequipped),youhaveaccesstoit.Thepotentialfordeveloperstocreatedynamicandintriguingapplicationsisnowwideopen.OntopofallthefeaturesthatareavailablefromtheAndroidsideoftheequation,Googlehasthrowninsomeverytantalizingfeaturesofitsown.DevelopersofAndroidapplicationswillbeabletotietheirapplicationsintoexistingGoogleofferingssuchasGoogleMapsandtheomnipresentGoogleSearch.SupposeyouwanttowriteanapplicationthatpullsupaGooglemapofwhereanincomingcallisemanatingfrom,oryouwanttobeabletostorecommonsearchresultswithyourcontacts;thedoorsofpossibilityhavebeenflungwideopenwithAndroid.Chapter2beginsyourjourneytoAndroiddevelopment.Youwilllearnthehow’sandwhy’sofusingspecificdevelopmentenvironmentsorintegrateddevelopmentenvironments(IDE),andyouwilldownloadandinstalltheJavaIDEEclipse.2Application:HelloWorld2.1KeySkills&Concepts● CreatingnewAndroidprojects● WorkingwithViews● UsingaTextView● Modifyingthemain.xmlfile● RunningapplicationsontheAndroidEmulatorInthischapter,youwillbecreatingyourfirstAndroidActivity.Thischapterexaminestheapplication-buildingprocessfromstarttofinish.IwillshowyouhowtocreateanAndroidprojectinEclipse,addcodetotheinitialfiles,andrunthefinishedapplicationintheAndroidEmulator.TheresultingapplicationwillbeafullyfunctioningprogramrunninginanAndroidenvironment.Actually,asyoumovethroughthischapter,youwillbecreatingmorethanoneAndroidActivity.ComputerprogrammingtraditiondictatesthatyourfirstapplicationbethetypicalHelloWorld!application,sointhefirstsectionyouwillcreateastandardHelloWorld!applicationwithjustablankbackgroundandthe“HelloWorld!”text.Then,forthesakeofenablingyoutogettoknowthelanguagebetter,thenextsectionexplainsindetailthefilesautomaticallycreatedbyAndroidforyourHelloWorld!application.YouwillcreatetwoiterationsofthisActivity,eachusingdifferenttechniquesfordisplayinginformationtothescreen.YouwillalsocreatetwodifferentversionsofaHelloWorld!applicationthatwilldisplayanimagethatdeliversthe“HelloWorld!”message.ThiswillgiveyouagoodintroductiontothecontrolsandinnerworkingsofAndroid.NOTE:Youwilloftensee“application”and“Activity”usedinterchangeably.ThedifferencebetweenthetwoisthatanapplicationcanbecomposedofmultipleActivities
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 邯鄲市電商產(chǎn)業(yè)園租賃合同
- 城市改造環(huán)境管理辦法
- 綠化設(shè)計(jì)合同樣本
- 2024年標(biāo)準(zhǔn)林地租賃協(xié)議一
- 石材買賣合同
- 福建省泉州市2023-2024學(xué)年高二上學(xué)期1月期末教學(xué)質(zhì)量監(jiān)測(cè)數(shù)學(xué)試題(解析版)
- 2024年農(nóng)民田地租賃與農(nóng)村民宿項(xiàng)目合作意向書3篇
- 電器賣場(chǎng)租賃合同模板
- 科技公司前臺(tái)管理辦法
- 潞安職業(yè)技術(shù)學(xué)院《國(guó)民經(jīng)濟(jì)核算》2023-2024學(xué)年第一學(xué)期期末試卷
- 普通胃鏡早期胃癌的診斷PPT課件
- DG∕T 154-2022 熱風(fēng)爐
- 鐵路建設(shè)項(xiàng)目施工企業(yè)信用評(píng)價(jià)辦法(鐵總建設(shè)〔2018〕124號(hào))
- 模具報(bào)價(jià)表精簡(jiǎn)模板
- 抽樣檢驗(yàn)培訓(xùn)教材(共47頁(yè)).ppt
- 時(shí)光科技主軸S系列伺服控制器說(shuō)明書
- 通用帶式輸送機(jī)TD75或DT型出廠檢驗(yàn)要求及記錄
- 高考英語(yǔ)單項(xiàng)選擇題題庫(kù)題
- lonely-planet-PDF-大全
- 成人大專畢業(yè)生自我鑒定
- 汽車轉(zhuǎn)向系統(tǒng)設(shè)計(jì)規(guī)范
評(píng)論
0/150
提交評(píng)論