版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
Android平臺開發(fā)簡簡介平臺介紹及及開發(fā)基本本流程2011-4月什么是Android?Android是Google在2007年11月5日推出的開開源手機操操作系統(tǒng)。。目前Android在中國的發(fā)發(fā)展是非非常常火的,為為了節(jié)省研研發(fā)費用,,國內(nèi)很多多的手機廠廠商和移動動運營商紛紛紛加入到到了android陣營,其中中包括中國國移動,中中國聯(lián)通,中國電信,,華為,聯(lián)聯(lián)想等大企企業(yè)。在中中國不管是是知名的手手機生產(chǎn)廠廠商還是山山寨手機廠廠商,都已已經(jīng)開始生生產(chǎn)Android操作系統(tǒng)的的手機。另另外android應(yīng)用的范圍圍不僅僅在在手機,還還被應(yīng)用在在汽車、平平板電腦、、和智能上上網(wǎng)設(shè)備上上,聽說國國外已經(jīng)有有了安裝有有Android系統(tǒng),并且且能夠上網(wǎng)網(wǎng)的智能電電飯煲,用用戶在千里里之外就可可以操作電電飯煲進行行煮飯。由于大家大大多使用的的手機都屬屬傻瓜手機機,也就是是打打電話話、發(fā)發(fā)短短信。從今今天開始,,大家就應(yīng)應(yīng)該改變這這個觀念了了,你們需需要把智能能手機看作作是一臺電電腦,它能能完成電腦腦所能完成成的一切。。所以你可可以像在電電腦一樣,,在智能手手機上安裝裝軟件,以以滿足你工工作和生活活的需要。。如何安裝AndroidSDK和Eclipse插件所需開發(fā)環(huán)環(huán)境:JDK5或以上版本本(僅有JRE不夠)、Eclipse3.4或以上版本本,推薦使用““伽利略””版。下載用于在在Eclipse開發(fā)android應(yīng)用的ADT插件在企業(yè)開發(fā)發(fā)中,很多多程序員使使用EclipseIDE作為應(yīng)用的的開發(fā)環(huán)境境。為了使使得Android應(yīng)用的創(chuàng)建建,運行和和調(diào)試更加加方便快捷捷。Android的開發(fā)團隊隊專門針對對EclipseIDE定制了一個個插件:AndroidDevelopmentTools(ADT)下載地址::/android/ADT-0.9.8.zip安裝Eclipse插件(ADT)啟動Eclipse,選擇Help>InstallNewSoftware,在出現(xiàn)的的對話框里里,點擊Add按鈕,在對對話框的name一欄輸入“ADT””,然后點擊Archive...,瀏覽和選選擇已經(jīng)下下載的ADT插件壓縮文件。。點擊OK.。返回可用軟軟件的視圖圖,你會看看到這個插插件,然后選擇DeveloperTools(會選中下面面的“AndroidDeveloperTools””和“AndroidEditors““),點擊Next,最后重啟啟Eclipse。下載安裝AndroidSDK:AndroidSDK包含了開發(fā)發(fā)Android應(yīng)用所依賴賴的jar文件、運行行環(huán)境及相相關(guān)工具。。下載地址::/android/android-sdk_r07-windows.zip下載完SDK后,把.zip文件解壓到到你電腦上上合適位置置。啟動Eclipse,選擇window->preferences,在打開的的視圖左邊邊點擊android,在右邊的的SDKLocation中選擇AndroidSDK所在位置。。開發(fā)第一個個Android應(yīng)用打開Eclipse,新建項目目(點擊FileNewProject),在項目列列表中展開開Android目錄,選擇擇AndroidProject,如下圖::開發(fā)第一個個Android應(yīng)用開發(fā)第一個個Android應(yīng)用點擊”finish”即可完成項項目的創(chuàng)建建,創(chuàng)建后后的項目已已經(jīng)是一個個可運行的的Android應(yīng)用,我們們可以通過過下面方式式運行此應(yīng)應(yīng)用:點擊工具欄欄上機器人人形狀的虛虛擬設(shè)備管管理器(簡簡稱“AVD“),如下::開發(fā)第一個個Android應(yīng)用“尚未注冊網(wǎng)網(wǎng)絡(luò)”錯誤誤信息的解解決辦法打開開Android模擬擬器器時時,,出出現(xiàn)現(xiàn)無無信信號號,,拔拔打打電電話話或或發(fā)發(fā)短短信信時時,,提提示示““尚尚未未注注冊冊網(wǎng)網(wǎng)絡(luò)絡(luò)””錯錯誤誤信信息息的的解解決決方方案案如如下下。。場景景一一::你你的的電電腦腦沒沒有有連連接接上上互互聯(lián)聯(lián)網(wǎng)網(wǎng),,同同時時也也沒沒有有在在局局域域網(wǎng)網(wǎng)。。解決決辦辦法法::右右鍵鍵點點擊擊網(wǎng)網(wǎng)上上鄰鄰居居,選擇擇"屬性性",在網(wǎng)網(wǎng)絡(luò)絡(luò)連連接接窗窗口口中中右右鍵鍵點點擊擊"本地地連連接接",選擇擇"屬性性",設(shè)置置TCP/IP屬性性如如下下:IP地址址:00子網(wǎng)網(wǎng)掩掩碼碼:默認(rèn)認(rèn)網(wǎng)網(wǎng)關(guān)關(guān):00首選選DNS服務(wù)務(wù)器器:00場景景二二::你你的的電電腦腦沒沒有有連連接接上上互互聯(lián)聯(lián)網(wǎng)網(wǎng),,但但在在局局域域網(wǎng)網(wǎng)。。解決決辦辦法法::右右鍵鍵點點擊擊網(wǎng)網(wǎng)上上鄰鄰居居,選擇擇"屬性性",在網(wǎng)網(wǎng)絡(luò)絡(luò)連連接接窗窗口口中中右右鍵鍵點點擊擊"本地地連連接接",選擇擇"屬性性",設(shè)置置TCP/IP屬性性如如下下:IP地址址:設(shè)置置成成你你所所在在局局域域網(wǎng)網(wǎng)的的IP,如如::00子網(wǎng)網(wǎng)掩掩碼碼:設(shè)置置成成你你所所在在局局域域網(wǎng)網(wǎng)的的掩掩碼碼,,如如::默認(rèn)認(rèn)網(wǎng)網(wǎng)關(guān)關(guān):設(shè)置置成成你你所所在在局局域域網(wǎng)網(wǎng)的的網(wǎng)網(wǎng)關(guān)關(guān),,一一般般網(wǎng)網(wǎng)關(guān)關(guān)的的IP格式式為為::*.*.*.1,如如::首選選DNS服務(wù)務(wù)器器:設(shè)置置成成你你所所在在局局域域網(wǎng)網(wǎng)的的路路由由器器IP,一一般般路路由由器器的的IP格式式為為::*.*.*.1,如如::最后后一一種種解解決決方方案案是是::讓讓你你的的電電腦腦連連接接上上互互聯(lián)聯(lián)網(wǎng)網(wǎng)。。開發(fā)發(fā)第第一一個個Android應(yīng)用用在項項目目上上右右鍵鍵點點擊擊runasAndroidapplication,如如下下圖圖:Android應(yīng)用用程程序序架架構(gòu)構(gòu)src/java原代代碼碼存存放放目目錄錄gen/自動動生生成成目目錄錄gen目錄錄中中存存放放所所有有由由Android開發(fā)發(fā)工工具具自自動動生生成成的的文文件件。。目目錄錄中中最最重重要要的的就就是是R.java文件件。。這這個個文文件件由由Android開發(fā)發(fā)工工具具自自動動產(chǎn)產(chǎn)生生的的。。Android開發(fā)發(fā)工工具具會會自自動動根根據(jù)據(jù)你你放放入入res目錄錄的的xml界面面文文件件、、圖圖標(biāo)標(biāo)與與常常量量,,同同步步更更新新修修改改R.java文件件。。正正因因為為R.java文件件是是由由開開發(fā)發(fā)工工具具自自動動生生成成的的,,所所以以我我們們應(yīng)應(yīng)避避免免手手工工修修改改R.java。R.java在應(yīng)應(yīng)用用中中起起到到了了字字典典的的作作用用,,它它包包含含了了界界面面、、圖圖標(biāo)標(biāo)、、常常量量等等各各種種資資源源的的id,通過R.java,應(yīng)用可以很很方便地找到到對應(yīng)資源。。另外編繹器器也會檢查R.java列表中的資源源是否被使用用到,沒有被被使用到的資資源不會編繹繹進軟件中,,這樣可以減減少應(yīng)用在手手機占用的空空間。res/資源(Resource)目錄在這個目錄中中我們可以存存放應(yīng)用使用用到的各種資資源,如xml界面文件,圖圖片或數(shù)據(jù)。。assets資源目錄Android除了提供/res目錄存放資源源文件外,在在/assets目錄也可以存存放資源文件件,而且/assets目錄下的資源源文件不會在在R.java自動生成ID,所以讀取/assets目錄下的文件件必須指定文文件的路徑,,如:file:///android_asset/xxx.3gpAndroidManifest.xml項目清單文件件這個文件列出出了應(yīng)用程序序所提供的功功能,以后你你開發(fā)好的各各種組件需要要在該文件中中進行配置,,如果應(yīng)用使使用到了系統(tǒng)統(tǒng)內(nèi)置的應(yīng)用用(如電話服務(wù)、、互聯(lián)網(wǎng)服務(wù)務(wù)、短信服務(wù)務(wù)、GPS服務(wù)等等),你還需在該該文件中聲明明使用權(quán)限。。perties項目環(huán)境信息息,一般是不需需要修改此文文件Android中的顯示單位位px(pixels)像素一般HVGA代表320x480像素,這個用用的比較多。。dip或dp(deviceindependentpixels)設(shè)備獨立像素素這個和設(shè)備硬硬件有關(guān),一一般為了支持持WVGA、HVGA和QVGA推薦使用這個個,不依賴像像素。sp(scaledpixels—bestfortextsize)比例像素主要處理字體體的大小,可可以根據(jù)系統(tǒng)統(tǒng)的字體自適適應(yīng)。除了上面三個個顯示單位,,下面還有幾幾個不太常用用:in(inches)英寸mm(millimeters)毫米pt(points)點,1/72英寸為了適適應(yīng)不不同分分辨率率,不不同的的像素素密度度,推推薦使使用dip,文字字使用用sp。Android開發(fā)平平臺是是開放放的平平臺,,而位位于四四層框框架頂頂端的的應(yīng)用用開發(fā)發(fā),必必然涉涉及到到Android組件。。本文文將為為大家家詳細(xì)細(xì)介紹紹Android組件。。組件((Component),在在談及及所謂謂架構(gòu)構(gòu)和重重用的的時候候,是是一個個重要要的事事情。。很多多時候候都會會說基基于組組件的的軟件件架構(gòu)構(gòu),指指的是是期望望把程程序做做樂高高似的的,有有一堆堆接口口標(biāo)準(zhǔn)準(zhǔn)封裝裝完整整的組組件放放在哪哪里,,想用用的時時候取取上幾幾個一一搭配配,整整個程程序就就構(gòu)建建完成成了。。在開篇篇的時時候就就在說說,Android是一個個為組組件化化而搭搭建的的平臺臺,它它引入入所謂謂Mash-Up的概念念,這這使得得你在在應(yīng)用用的最最上層層,想想做的的不組組件化化都是是很困困難的的一件件事,,具體體說來來,Android有四大大組件件:Activity、Service、BroadcastReceiver、ContentProvider。Android四大組組建Activity是為用用戶操操作而而展示示的可可視化化用戶戶界面面。比比如說說,一一個activity可以展展示一一個菜菜單項項列表表供用用戶選選擇,,或者者顯示示一些些包含含說明明的照照片。。一個個短消消息應(yīng)應(yīng)用程程序可可以包包括一一個用用于顯顯示做做為發(fā)發(fā)送對對象的的聯(lián)系系人的的列表表的activity,一個個給選選定的的聯(lián)系系人寫寫短信信的activity以及翻翻閱以以前的的短信信和改改變設(shè)設(shè)置的的activity。盡管管它們們一起起組成成了一一個內(nèi)內(nèi)聚的的用戶戶界面面,但但其中中每個個activity都與其其它的的保持持獨立立。每每個都都是以以Activity類為基基類的的子類類實現(xiàn)現(xiàn)。一個應(yīng)應(yīng)用程程序可可以只只有一一個activity,或者者,如如剛才才提到到的短短信應(yīng)應(yīng)用程程序那那樣,,包含含很多多個。。每個個activity的作用用,以以及其其數(shù)目目,自自然取取決于于應(yīng)用用程序序及其其設(shè)計計。一一般情情況下下,總總有一一個應(yīng)應(yīng)用程程序被被標(biāo)記記為用用戶在在應(yīng)用用程序序啟動動的時時候第第一個個看到到的。。從一一個activity轉(zhuǎn)向另一個個的方式是是靠當(dāng)前的的activity啟動下一個個。每個activity都被給予一一個默認(rèn)的的窗口以進進行繪制。。一般情況況下,這個個窗口是滿滿屏的,但但它也可以以是一個小小的位于其其它窗口之之上的浮動動窗口。一一個activity也可以使用用超過一個個的窗口───比如,,在activity運行過程中中彈出的一一個供用戶戶反應(yīng)的小小對話框,,或是當(dāng)用用戶選擇了了屏幕上特特定項目后后顯示的必必要信息。。窗口顯示的的可視內(nèi)容容是由一系系列視圖構(gòu)構(gòu)成的,這這些視圖均均繼承自View基類。每個個視圖均控控制著窗口口中一塊特特定的矩形形空間。父父級視圖包包含并組織織它子視圖圖的布局。。葉節(jié)點視視圖(位于于視圖層次次最底端))在它們控控制的矩形形中進行繪繪制,并對對用戶對其其直接操作作做出響應(yīng)應(yīng)。所以,,視圖是activity與用戶進行行交互的界界面。比如如說,視圖圖可以顯示示一個小圖圖片,并在在用戶指點點它的時候候產(chǎn)生動作作。Android有很多既定定的視圖供供用戶直接接使用,包包括按鈕、、文本域、、卷軸、菜菜單項、復(fù)復(fù)選框等等等。Activity活動服務(wù)沒有可可視化的用用戶界面,,而是在一一段時間內(nèi)內(nèi)在后臺運運行。比如如說,一個個服務(wù)可以以在用戶做做其它事情情的時候在在后臺播放放背景音樂樂、從網(wǎng)絡(luò)絡(luò)上獲取一一些數(shù)據(jù)或或者計算一一些東西并并提供給需需要這個運運算結(jié)果的的activity使用。每個個服務(wù)都繼繼承自Service基類。一個媒體播播放器播放放播放列表表中的曲目目是一個不不錯的例子子。播放器器應(yīng)用程序序可能有一一個或多個個activity來給用戶選選擇歌曲并并進行播放放。然而,,音樂播放放這個任務(wù)務(wù)本身不應(yīng)應(yīng)該為任何何activity所處理,因因為用戶期期望在他們們離開播放放器應(yīng)用程程序而開始始做別的事事情時,音音樂仍在繼繼續(xù)播放。。為達到這這個目的,,媒體播放放器activity應(yīng)該啟用一一個運行于于后臺的服服務(wù)。而系系統(tǒng)將在這這個activity不再顯示于于屏幕之后后,仍維持持音樂播放放服務(wù)的運運行。你可以連接接至(綁定定)一個正正在運行的的服務(wù)(如如果服務(wù)沒沒有運行,,則啟動之之)。連接接之后,你你可以通過過那個服務(wù)務(wù)暴露出來來的接口與與服務(wù)進行行通訊。對對于音樂服服務(wù)來說,,這個接口口可以允許許用戶暫停停、回退、、停止以及及重新開始始播放。如同activity和其它組件件一樣,服服務(wù)運行于于應(yīng)用程序序進程的主主線程內(nèi)。。所以它不不會對其它它組件或用用戶界面有有任何干擾擾,它們一一般會派生生一個新線線程來進行行一些耗時時任務(wù)(比比如音樂回回放)。Service服務(wù)和接收收器廣播接收器器是一個專專注于接收收廣播通知知信息,并并做出對應(yīng)應(yīng)處理的組組件。很多多廣播是源源自于系統(tǒng)統(tǒng)代碼的───比如,,通知時區(qū)區(qū)改變、電電池電量低低、拍攝了了一張照片片或者用戶戶改變了語語言選項。。應(yīng)用程序序也可以進進行廣播───比如說說,通知其其它應(yīng)用程程序一些數(shù)數(shù)據(jù)下載完完成并處于于可用狀態(tài)態(tài)。應(yīng)用程序可可以擁有任任意數(shù)量的的廣播接收收器以對所所有它感興興趣的通知知信息予以以響應(yīng)。所所有的接收收器均繼承承自BroadcastReceiver基類。廣廣播接收器器沒有用戶戶界面。然然而,它們們可以啟動動一個activity來響應(yīng)它們們收到的信信息,或者者用NotificationManager來通知用戶戶。通知可可以用很多多種方式來來吸引用戶戶的注意力力──閃動動背燈、震震動、播放放聲音等等等。一般來來說是在狀狀態(tài)欄上放放一個持久久的圖標(biāo),,用戶可以以打開它并并獲取消息息。BroadcastReceiver接收器內(nèi)容提供者將將一些特定的的應(yīng)用程序數(shù)數(shù)據(jù)供給其它它應(yīng)用程序使使用。數(shù)據(jù)可可以存儲于文文件系統(tǒng)、SQLite數(shù)據(jù)庫或其它它方式。內(nèi)容容提供者繼承承于ContentProvider基類,為其它它應(yīng)用程序取取用和存儲它它管理的數(shù)據(jù)據(jù)實現(xiàn)了一套套標(biāo)準(zhǔn)方法。。然而,應(yīng)用用程序并不直直接調(diào)用這些些方法,而是是使用一個ContentResolver對象,調(diào)用它它的方法作為為替代。ContentResolver可以與任意內(nèi)內(nèi)容提供者進進行會話,與與其合作來對對所有相關(guān)交交互通訊進行行管理。參閱獨立的內(nèi)內(nèi)容提供者章章節(jié)獲得更多多關(guān)于使用內(nèi)內(nèi)容提供者的的內(nèi)容。每當(dāng)出現(xiàn)一個個需要被特定定組件處理的的請求時,Android會確保那個組組件的應(yīng)用程程序進程處于于運行狀態(tài),,或在必要的的時候啟動它它。并確保那那個相應(yīng)組件件的實例的存存在,必要時時會創(chuàng)建那個個實例。ContentProvider當(dāng)接收到ContentResolver發(fā)出的請求后后,內(nèi)容提供供者被激活。。而其它三種種組件──activity、服務(wù)和廣播播接收器被一一種叫做intent的異步消息所所激活。intent是一個保存著著消息內(nèi)容的的Intent對象。對于activity和服務(wù)來說,,它指明了請請求的操作名名稱以及作為為操作對象的的數(shù)據(jù)的URI和其它一些信信息。比如說說,它可以承承載對一個activity的請求,讓它它為用戶顯示示一張圖片,,或者讓用戶戶編輯一些文文本。而對于于廣播接收器器而言,Intent對象指明了聲聲明的行為。。比如,它可可以對所有感感興趣的對象象聲明照相按按鈕被按下。。對于每種組件件來說,激活活的方法是不不同的:通過傳遞一個個Intent對象至Context.startActivity()或Activity.startActivityForResult()以載載入入((或或指指定定新新工工作作給給))一一個個activity。相相應(yīng)應(yīng)的的activity可以以通通過過調(diào)調(diào)
組件件的的連連接接者者--Intent通過傳傳遞一一個Intent對象至至Context.startService()將啟動動一個個服務(wù)務(wù)(或或給予予正在在運行行的服服務(wù)以以一個個新的的指令令)。。Android調(diào)用服服務(wù)的的onStart()方法并并將Intent對象傳傳遞給給它。。與與此類類似,,一個個Intent可以被被調(diào)用用組件件傳遞遞給Context.bindService()以獲取取一個個正在在運行行的目目標(biāo)服服務(wù)的的連接接。這這個服服務(wù)會會經(jīng)由由onBind()方法的的調(diào)用用獲取取這個個Intent對象((如果果服務(wù)務(wù)尚未未啟動動,bindService()會先啟啟動它它)。。比如如說,,一個個activity可以連連接至至前述述的音音樂回回放服服務(wù),,并提提供給給用戶戶一個個可操操作的的(用用戶界界面))以對對回放放進行行控制制。這這個activity可以調(diào)調(diào)用bindService()來建立立連接接,然然后調(diào)調(diào)用服服務(wù)中中定義義的對對象來來影響響回放放。應(yīng)用程程序可可以Manifest文件當(dāng)Android啟動一一個應(yīng)應(yīng)用程程序組組件之之前,,它必必須知知道那那個組組件是是存在在的。。所以以,應(yīng)應(yīng)用程程序會會在一一個manifest文件中中聲明明它的的組件件,這這個文文件會會被打打包到到Android包中。。這個個.apk文件還還將涵涵括應(yīng)應(yīng)用程程序的的代碼碼、文文件以以及其其它資資源。。這個manifest文件以以XML作為結(jié)結(jié)構(gòu)格格式,,而且且對于于所有有應(yīng)用用程序序,都都叫做做AndroidManifest.xml。為聲聲明一一個應(yīng)應(yīng)用程程序組組件,,它還還會做做很多多額外外工作作,比比如指指明應(yīng)應(yīng)用程程序所所需鏈鏈接到到的庫庫的名名稱((除了了默認(rèn)認(rèn)的Android庫之外外)以以及聲聲明應(yīng)應(yīng)用程程序期期望獲獲得的的各種種權(quán)限限。但manifest文件件的主主要功功能仍仍然是是向Android聲明明應(yīng)用用程序序的組組件。。舉例例說明明,一一個activity可可以如如下聲聲明::<activity>元素的的name屬性性指定定了實實現(xiàn)了了這個個activity的Activity的子類類。icon和和label屬屬性指指向了了包含含展示示給用用戶的的此activity的的圖標(biāo)標(biāo)和標(biāo)標(biāo)簽的的資源源文件件。其它組組件也也以類類似的的方法法聲明明───<service>元素用用于聲聲明服服務(wù),,<receiver>元素用用于聲聲明廣廣播接接收器器,而而<provider>元素用用于聲聲明內(nèi)內(nèi)容提提供者者。manifest文件中中未進進行聲聲明的的activity、服務(wù)務(wù)以及及內(nèi)容容提供供者將將不為為系統(tǒng)統(tǒng)所見見,從從而也也就不不會被被運行行。然然而,,廣播播接收收器既既可以以在manifest文件中中聲明明,也也可以以在代代碼中中進行行動態(tài)態(tài)的創(chuàng)創(chuàng)建,,并以以調(diào)用用Context.registerReceiver()的方式式注冊冊至系系統(tǒng)。。如前所所述,,一個個activity可以啟啟動另另外一一個,,甚至至包括括與它它不處處于同同一應(yīng)應(yīng)用程程序之之中的的。舉舉個例例子說說,假假設(shè)你你想讓讓用戶戶看到到某個個地方方的街街道地地圖。。而已已經(jīng)存存在一一個具具有此此功能能的activity了,那那么你你的activity所需要要做的的工作作就是是把請請求信信息放放到一一個Intent對象里里面,,并把把它傳傳遞給給startActivity()。于是是地圖圖瀏覽覽器就就會顯顯示那那個地地圖。。而當(dāng)當(dāng)用戶戶按下下BACK鍵的時時候,,你的的activity又會再再一次次的顯顯示在在屏幕幕上。。對于用用戶來來說,,這看看起來來就像像是地地圖瀏瀏覽器器是你你activity所在的的應(yīng)用用程序序中的的一個個組成成部分分,其其實它它是在在另外外一個個應(yīng)用用程序序中定定義,,并運運行在在那個個應(yīng)用用程序序的進進程之之中的的。Android將這這兩兩個個activity放在在同同一一個個任任務(wù)務(wù)中中來來維維持持一一個個完完整整的的用用戶戶體體驗驗。。簡簡單單的的說說,,任任務(wù)務(wù)就就是是用用戶戶所所體體驗驗到到的的““應(yīng)應(yīng)用用程程序序””。。它它是是安安排排在在一一個個堆堆棧棧中中的的一一組組相相關(guān)關(guān)的的activity。堆堆棧棧中中的的根根activity就是是啟啟動動了了這這整整個個任任務(wù)務(wù)的的那那個個────一一般般情情況況下下,,它它就就是是用用戶戶在在應(yīng)應(yīng)用用程程序序加加載載器器中中所所選選擇擇的的。。而而堆堆棧棧最最上上方方的的activity則是是當(dāng)當(dāng)前前運運行行的的────用用戶戶直直接接對對其其進進行行操操作作的的。。當(dāng)當(dāng)一一個個activity啟動動另另外外一一個個的的時時候候,,新新的的activity就被被壓壓入入堆堆棧棧,,并并成成為為當(dāng)當(dāng)前前運運行行的的activity。而而前前一一個個activity仍保保持持在在堆堆棧棧之之中中。。當(dāng)當(dāng)用用戶戶按按下下BACK鍵的的時時候候,,當(dāng)當(dāng)前前activity出棧棧,,而而前前一一個個恢恢復(fù)復(fù)為為當(dāng)當(dāng)前前運運行行的的activity。Activity和任務(wù)Activity生命周期期用戶界面面UserInterface在一個Android應(yīng)用中,,用戶界界面是由由View和ViewGroup對象構(gòu)建建的。View與ViewGroup都有很多多種類,,而它們們都是View類的子類類。ViewView對象是Android平臺中用用戶界面面體現(xiàn)的的基礎(chǔ)單單位。View類是它稱稱為“widgets(工具))”的子子類的基基礎(chǔ),它它們提供供了諸如如文本輸輸入框和和按鈕之之類的UI對象的完完整實現(xiàn)現(xiàn)。ViewGroup類同樣為為其被稱稱為“Layouts(布局))”的子子類奠定定了基礎(chǔ)礎(chǔ),它們們提供了了象流式式布局、、表格布布局以及及相對布布局之類類的布局局架構(gòu)。。View對象是一一個數(shù)據(jù)據(jù)體,它它的屬性性存儲了了用于屏屏幕上一一塊矩形形區(qū)域的的布局參參數(shù)及內(nèi)內(nèi)容。并并負(fù)責(zé)這這塊它所所轄的這這個矩形形區(qū)域之之中所有有測量、、布局、、焦點轉(zhuǎn)轉(zhuǎn)換、卷卷動以及及按鍵/觸摸手勢勢的處理理。作為為一個用用戶界面面對象,,View同時也擔(dān)擔(dān)任著用用戶交互互關(guān)鍵點點以及交交互事件件接受者者的角色色。布局Layout定義并展現(xiàn)你你的視圖層次次的最常用的的方法是使用用XML布局文件。如如同HTML一樣,XML為布局提供了了一種可讀的的結(jié)構(gòu)。XML中的每個元素素都是View或ViewGroup對象(抑或它它們的子類))。View對象是樹的葉葉節(jié)點,而ViewGroup對象是樹的分分支(參閱樓樓上的視圖層層次圖)。XML元素的名稱與與它體現(xiàn)的Java類相對應(yīng)。所所以一個<TextView>元素將在你的的UI中生成一個TextView,而<LinearLayout>則創(chuàng)建一個LinearLayout視圖組。當(dāng)你你載入一個布布局資源時,,Android系統(tǒng)會根據(jù)你你布局中的元元素初始化這這些運行時對對象。舉例來說,一一個包含文本本視圖和一個個按鈕的簡單單垂直布局如如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><TextViewandroid:id="@+id/text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello,IamaTextView"/><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello,IamaButton"/></LinearLayout>請注意:LinearLayout元素包含了TextView和Button對象。你可以以在其中另外外安置一個LinearLayout(或其它類型型的視圖組)),以延展這這個視圖層次次,構(gòu)建更復(fù)復(fù)雜的布局。。用戶界面事件件UIEvents當(dāng)你在用戶界界面中加入了了一些視圖和和工具之后,,你可能想要要知道如何讓讓它們與用戶戶交互,進而而實現(xiàn)你的動動作。如欲獲獲得用戶界面面事件通知,,你需要做以以下兩件事情情之一:?定義一個事件件偵聽器并將將其注冊至視視圖。通常情情況下,這是是你偵聽事件件的主要方式式。View類包含了一大大堆命名類似似On<什么什么>Listener的接口,每個個都帶有一個個叫做On<什么什么>()的回調(diào)方法。。比如:View.OnClickListener(用以處理視視圖中的點擊擊),View.OnTouchListener(用以處理視視圖中的觸屏屏事件),以以及View.OnKeyListener(用以處理理視圖中的的設(shè)備按鍵鍵事件)。。所以,如如果你希望望你的視圖圖在它被””點擊”((比如選擇擇了一個按按鈕)的時時候獲得通通知,你就就要實現(xiàn)OnClickListener,定義它的的onClick()回調(diào)方法((在其中進進行相應(yīng)處處理),并并將它用setOnClickListener()方法注冊到到視圖上。。?為視圖覆寫寫一個現(xiàn)有有的回調(diào)方方法。這種種方法主要要用于你自自己實現(xiàn)了了一個View類,并想偵偵聽其上發(fā)發(fā)生的特定定事件。比比如說當(dāng)屏屏幕被觸摸摸(onTouchEvent()),當(dāng)軌跡跡球發(fā)生了了移動(onTrackballEvent())或者是設(shè)設(shè)備上的按按鍵被按下下(onKeyDown())。這種方方式允許你你為自己定定制的視圖圖中發(fā)生的的每個事件件定義默認(rèn)認(rèn)的行為,,并決定是是否需要將將事件傳遞遞給其它的的子視圖。。再說一次次,這些是是View類相關(guān)的回回調(diào)方法,,所以你只只能在你構(gòu)構(gòu)建自定義義組件時定定義它們。。如何在視圖圖中處理用用戶交互請請參見處理理用戶界面面事件文檔檔。資源和資產(chǎn)產(chǎn)ResourcesandAssets資源是Android應(yīng)用程序不不可或缺的的部分??偪傮w而言,,資源是你你想包含和和引入到應(yīng)應(yīng)用程序里里面的一些些外部元素素,比如圖圖片、音頻頻、視頻、、文本字符符串、布局局、主題等等。每個Android應(yīng)用程序包包含一個資資源目錄((res/)和資產(chǎn)目目錄(assets/),資產(chǎn)不不經(jīng)常被使使用,因為為它們的應(yīng)應(yīng)用程序很很少。你僅僅在需要讀讀取原始字字節(jié)流時才才需要保存存數(shù)據(jù)為資資產(chǎn)。資源源和資產(chǎn)目目錄均駐留留在Android項目樹的頂頂端,和源源代碼目錄錄(src/)處在同一一級上。資源和資產(chǎn)產(chǎn)從表面上上看沒多大大區(qū)別,不不過總體上上,在存儲儲外部內(nèi)容容時資源用用得更多。。真正的區(qū)區(qū)別在于任任何放置在在資源目錄錄里的內(nèi)容容可以通過過您的應(yīng)用用程序的R類訪問,這這是被Android編譯過的。。而任何存存放在資產(chǎn)產(chǎn)目錄里的的內(nèi)容會保保持它的原原始文件格格式,為了了讀取它,,你必須使使用AssetManager來以字節(jié)流流的方式讀讀取文件。。所以保持持文件和數(shù)數(shù)據(jù)在資源源中(res/)中會更方方便訪問。。目錄Directory資源類型ResourceTypesres/anim/ XML文件,它們們被編譯進進逐幀動畫畫(framebyframeanimation)或補間動動畫(tweenedanimation)對象res/drawable/ .png、.9.png、.jpg文件,它們們被編譯進進以下的Drawable資源子類型型中:要獲得這種種類型的一一個資源,,可以使用用Resource.getDrawable(id)位圖文件9-patches(可變尺寸寸的位圖))為了獲取資資源類型,,使用mContext.getResources().getDrawable(R.drawable.imageId)注意:放在在這里的圖圖像資源可可能會被aapt工具自動地地進行無損損壓縮優(yōu)化化。比如,,一個真彩彩色但并不不需要256色的PNG可能會被轉(zhuǎn)轉(zhuǎn)換為一個個帶調(diào)色板板的8位PNG。這使得同同等質(zhì)量的的圖片占用用更少的資資源。所以以我們得意意識到這些些放在該目目錄下的二二進制圖像像在生成時時可能會發(fā)發(fā)生變化。。如果你想想讀取一個個圖像位流流并轉(zhuǎn)換成成一個位圖圖(bitmap),請把圖像像文件放在在res/raw/目錄下,這這樣可以避避免被自動動優(yōu)化。res/layout/被編譯為屏屏幕布局((或屏幕的的一部分))的XML文件。參見見布局聲明明(DeclaringLayout)res/values/可以被編譯譯成很多種種類型的資資源的XML文件。注意:不像其他的的res/文件夾,它它可以保存存任意數(shù)量量的文件,,這些文件件保存了要要創(chuàng)建資源源的描述,,而不是資資源本身。。XML元素類型控控制這些資資源應(yīng)該放放在R類的什么地地方。盡管這個文文件夾里的的文件可以以任意命名名,不過下下面使一些些比較典型型的文件((文件命名名的慣例是是將元素類類型包含在在該名稱之之中):array.xml定義數(shù)據(jù)colors.xml定義colordrawable和顏色的字字符串值((colorstringvalues)。使用Resource.getDrawable()和Resources.getColor()分別獲得這這些資源。。dimens.xml定義尺寸值值(dimensionvalue)。使用Resources.getDimension()獲得這些資資源。strings.xml定義字符串串(string)值(使用用Resources.getString()或者Resources.getText()獲取這些資資源。getText()會保留在UI字符串上應(yīng)應(yīng)用的豐富富的文本樣樣式)。? styles.xml定義樣式((style)對象。res/xml/任意的XML文件,在運運行時可以以通過調(diào)用用Resources.getXML()讀取。res/raw/直接復(fù)制到到設(shè)備中的的任意文件件。它們無無需編譯,,添加到你你的應(yīng)用程程序編譯產(chǎn)產(chǎn)生的壓縮縮文件中。。要使用這這些資源,,可以調(diào)用用Resources.openRawResource(),參數(shù)是資資源的ID,即R.raw.somefilename。數(shù)據(jù)存儲與與訪問很多時候我我們的軟件件需要對處處理后的數(shù)數(shù)據(jù)進行存存儲或再次次訪問。Android為數(shù)據(jù)存儲儲提供了多多種方式,,分別有如如下幾種::文件SharedPreferences(參數(shù))SQLite數(shù)據(jù)庫內(nèi)容提供者者(Contentprovider)網(wǎng)絡(luò)使用文件進進行數(shù)據(jù)存存儲首先給大家家介紹使用用文件如何何對數(shù)據(jù)進進行存儲,,Activity提供了openFileOutput()方法可以用用于把數(shù)據(jù)據(jù)輸出到文文件中,具具體的實現(xiàn)現(xiàn)過程與在在J2SE環(huán)境中保保存數(shù)據(jù)據(jù)到文件件中是一一樣的。。publicclassFileActivityextendsActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){...FileOutputStreamoutStream=this.openFileOutput("itcast.txt",Context.MODE_PRIVATE);outStream.write(“ggggg".getBytes());outStream.close();}}openFileOutput()方法的第第一參數(shù)數(shù)用于指指定文件件名稱,,不能包包含路徑徑分隔符符“/”,如果文文件不存存在,Android會自動創(chuàng)創(chuàng)建它。。創(chuàng)建的的文件保保存在/data/data/<packagename>/files目錄,如如:/data/data/cn.itcast.action/files/itcast.txt,通過點點擊Eclipse菜單“Window””-“ShowView””-“Other”,在對話話窗口中中展開android文件夾,,選擇下下面的FileExplorer視圖,然然后在FileExplorer視圖中展展開/data/data/<packagename>/files目錄就可可以看到到該文件件。openFileOutput()方法的第第二參數(shù)數(shù)用于指指定操作作模式,,有四種種模式,,分別為為:Context.MODE_PRIVATE=0Context.MODE_APPEND=32768Context.MODE_WORLD_READABLE=1Context.MODE_WORLD_WRITEABLE=2使用文件件進行數(shù)數(shù)據(jù)存儲儲Context.MODE_PRIVATE:為默認(rèn)認(rèn)操作模模式,代代表該文文件是私私有數(shù)據(jù)據(jù),只能能被應(yīng)用用本身訪訪問,在在該模式式下,寫寫入的內(nèi)內(nèi)容會覆覆蓋原文文件的內(nèi)內(nèi)容,如如果想把把新寫入入的內(nèi)容容追加到到原文件件中。可可以使用用Context.MODE_APPENDContext.MODE_APPEND:模式會會檢查文文件是否否存在,,存在就就往文件件追加內(nèi)內(nèi)容,否否則就創(chuàng)創(chuàng)建新文文件。Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制制其他應(yīng)應(yīng)用是否否有權(quán)限限讀寫該該文件。。MODE_WORLD_READABLE:表示當(dāng)當(dāng)前文件件可以被被其他應(yīng)應(yīng)用讀取?。籑ODE_WORLD_WRITEABLE:表示當(dāng)當(dāng)前文件件可以被被其他應(yīng)應(yīng)用寫入入。如果希望望文件被被其他應(yīng)應(yīng)用讀和和寫,可可以傳入入:openFileOutput("itcast.txt",Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);android有一套自自己的安安全模型型,當(dāng)應(yīng)應(yīng)用程序序(.apk)在安裝時時系統(tǒng)就就會分配配給他一一個userid,當(dāng)該應(yīng)應(yīng)用要去去訪問其其他資源源比如文文件的時時候,就就需要userid匹配。默默認(rèn)情況況下,任任何應(yīng)用用創(chuàng)建的的文件,,sharedpreferences,數(shù)據(jù)庫庫都應(yīng)該該是私有有的(位位于/data/data/<packagename>/files),其其他程程序無無法訪訪問。。除非非在創(chuàng)創(chuàng)建時時指定定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE,只有有這樣樣其他他程序序才能能正確確訪問問。使用SharedPreferences進行數(shù)數(shù)據(jù)存存儲很多時時候我我們開開發(fā)的的軟件件需要要向用用戶提提供軟軟件參參數(shù)設(shè)設(shè)置功功能,,例如如我們們常用用的QQ,用戶戶可以以設(shè)置置是否否允許許陌生生人添添加自自己為為好友友。對對于軟軟件配配置參參數(shù)的的保存存,如如果是是window軟件通通常我我們會會采用用ini文件進進行保保存,,如果果是j2se應(yīng)用,,我們們會采采用properties屬性文文件或或者xml進行保保存。。如果果是Android應(yīng)用,,我們們最適適合采采用什什么方方式保保存軟軟件配配置參參數(shù)呢呢?Android平臺給給我們們提供供了一一個SharedPreferences類,它它是一一個輕輕量級級的存存儲類類,特特別適適合用用于保保存軟軟件配配置參參數(shù)。。使用用SharedPreferences保存數(shù)數(shù)據(jù),,其背背后是是用xml文件存存放數(shù)數(shù)據(jù),,文件件存放放在/data/data/<packagename>/shared_prefs目錄下下:SharedPreferencessharedPreferences=getSharedPreferences("itcast",Context.MODE_PRIVATE);Editoreditor=sharedPreferences.edit();//獲取編編輯器器editor.putString("name","傳智播播客");editor.putInt("age",4);mit();//提交修修改生成的的itcast.xml文件內(nèi)內(nèi)容如如下::<?xmlversion='1.0'encoding='utf-8'standalone='yes'?><map><stringname="name">傳智播播客</string><intname="age"value="4"/></map>因為SharedPreferences背后是是使用用xml文件保保存數(shù)數(shù)據(jù),,getSharedPreferences(name,mode)方法的的第一一個參參數(shù)用用于指指定該該文件件的名名稱,,名稱稱不用用帶后后綴,,后綴綴會由由Android自動加加上。。方法法的第第二個個參數(shù)數(shù)指定定文件件的操操作模模式,,共有有四種種操作作模式式,這這四種種模式式前面面介紹紹使用用文件件方式式保存存數(shù)據(jù)據(jù)時已已經(jīng)講講解過過。如如果希希望SharedPreferences背后使使用的的xml文件能能被其其他應(yīng)應(yīng)用讀讀和寫寫,可可以指指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE權(quán)限。。另外Activity還提供供了另另一個個getPreferences(mode)方法操操作SharedPreferences,這個個方法法默認(rèn)認(rèn)使用用當(dāng)前前類不不帶包包名的的類名名作為為文件件的名名稱。。訪問SharedPreferences中的數(shù)數(shù)據(jù)訪問SharedPreferences中的數(shù)據(jù)代代碼如下::SharedPreferencessharedPreferences=getSharedPreferences("itcast",Context.MODE_PRIVATE);//getString()第二個參數(shù)數(shù)為缺省值值,如果preference中不存在該該key,將返回缺缺省值Stringname=sharedPreferences.getString("name","");intage=sharedPreferences.getInt("age",1);如果訪問其其他應(yīng)用中中的Preference,前提條件件是:該preference創(chuàng)建時指定定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE權(quán)限。如::有個<packagename>為cn.itcast.action的應(yīng)用使用用下面語句句創(chuàng)建了preference。getSharedPreferences("itcast",Context.MODE_WORLD_READABLE);其他應(yīng)用要要訪問上面面應(yīng)用的preference,首先需要創(chuàng)創(chuàng)建上面應(yīng)應(yīng)用的Context,然后通過過Context訪問preference,訪問preference時會在應(yīng)用用所在包下下的shared_prefs目錄找到preference:ContextotherAppsContext=createPackageContext("cn.itcast.action",Context.CONTEXT_IGNORE_SECURITY);SharedPreferencessharedPreferences=otherAppsContext.getSharedPreferences("itcast",Context.MODE_WORLD_READABLE);Stringname=sharedPreferences.getString("name","");intage=sharedPreferences.getInt("age",0);如果不通過過創(chuàng)建Context訪問其他應(yīng)應(yīng)用的preference,也可以以以讀取xml文件方式直直接訪問其其他應(yīng)用preference對應(yīng)的xml文件,如::FilexmlFile=newFile(““/data/data/<packagename>/shared_prefs/itcast.xml”);//<packagename>應(yīng)替換成應(yīng)應(yīng)用的包名名使用嵌入式式關(guān)系型SQLite數(shù)據(jù)庫存儲儲數(shù)據(jù)除了可以使使用文件或或SharedPreferences存儲數(shù)據(jù),,還可以選選擇使用SQLite數(shù)據(jù)庫存儲儲數(shù)據(jù)。在Android平臺上,集集成了一個個嵌入式關(guān)關(guān)系型數(shù)據(jù)據(jù)庫—SQLite,SQLite3支持NULL、INTEGER、REAL(浮點數(shù)字字)、TEXT(字符串文本本)和BLOB(二進制對象象)數(shù)據(jù)類型,,雖然它支支持的類型型只有五種種,但實際際上sqlite3也接受varchar(n)、char(n)、decimal(p,s)等數(shù)據(jù)類型型,只不過過在運算或或保存時會會轉(zhuǎn)成對應(yīng)應(yīng)的五種數(shù)數(shù)據(jù)類型。。SQLite最大的特點點是你可以以把各種類類型的數(shù)據(jù)據(jù)保存到任任何字段中中,而不用用關(guān)心字段段聲明的數(shù)數(shù)據(jù)類型是是什么。例例如:可以以在Integer類型的字段段中存放字字符串,或或者在布爾爾型字段中中存放浮點點數(shù),或者者在字符型型字段中存存放日期型型值。但但有一種情情況例外::定義為INTEGERPRIMARYKEY的字段只能能存儲64位整數(shù),當(dāng)當(dāng)向這種種字段保存存除整數(shù)以以外的數(shù)據(jù)據(jù)時,將會會產(chǎn)生錯誤誤。另外外,SQLite在解析CREATETABLE語句時,會會忽略CREATETABLE語句中跟在在字段名后后面的數(shù)據(jù)據(jù)類型信息息,如下面面語句會忽忽略name字段的類型型信息:CREATETABLEperson(personidintegerprimarykeyautoincrement,namevarchar(20))SQLite可以解析大大部分標(biāo)準(zhǔn)準(zhǔn)SQL語句,如::查詢語句::select*from表名where條件子句groupby分組字句having...orderby排序子句如:select*frompersonselect*frompersonorderbyiddescselectnamefrompersongroupbynamehavingcount()>1分頁SQL與mysql類似,下面面SQL語句獲取5條記錄,跳跳過前面*3條記錄select*fromAccountlimit5offse
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)工委工作先進集體申報表(幼兒園)
- 2024年吉林小車客運從業(yè)資格證考試
- 2024年寧夏駕駛員客運資格證模擬考試題及答案詳解
- 2024年石家莊客運資格證理論考試答題技巧
- 2024年延邊考從業(yè)資格證客運試題
- 2024年福建客運應(yīng)用能力考試題庫
- 2024年河南客運從業(yè)資格證操作考試題答案
- 2024年梅州客運資格證題庫下載
- 2025屆河南省周口市商水縣周口中英文學(xué)校高三生物第一學(xué)期期末統(tǒng)考模擬試題含解析
- 《星期日的安排》課件
- 電氣專項施工方案(廠房)
- 消化道出血病人護理查房課件
- 梁祝(梁山伯與祝英臺)克萊德曼(原版)鋼琴雙手簡譜 鋼琴譜
- 公共關(guān)系學(xué)-實訓(xùn)項目1:公關(guān)三要素分析
- 人教版2022年四年級上冊數(shù)學(xué)期中考試考點檢查試卷
- 花城版音樂八年級下冊第3單元《生死不離》教案
- GB∕T 8163-2018 輸送流體用無縫鋼管
- 南京中醫(yī)大《金匱要略》教學(xué)大綱
- 鋼混組合梁施工方案
- 課件《“多元一體”視域下的中國古代民族關(guān)系》
- 初中班主任三年工作規(guī)劃8篇
評論
0/150
提交評論