第4章Android程序設(shè)計(jì)基礎(chǔ)_第1頁(yè)
第4章Android程序設(shè)計(jì)基礎(chǔ)_第2頁(yè)
第4章Android程序設(shè)計(jì)基礎(chǔ)_第3頁(yè)
第4章Android程序設(shè)計(jì)基礎(chǔ)_第4頁(yè)
第4章Android程序設(shè)計(jì)基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Android應(yīng)用程序開發(fā)第4章 Android程序設(shè)計(jì)基礎(chǔ)1目錄24.14.1AndroidAndroid程序結(jié)構(gòu)4.24.2AndroidAndroid程序框架知識(shí)4.34.3程序調(diào)試4.1Android程序結(jié)構(gòu)3圖 4 1給出了Android應(yīng)用程序Ch4_1的結(jié)構(gòu)。其中包含的一些目錄和文件都有固定的作用,有的可以修改,有的則不能進(jìn)行修改。2res目錄存放項(xiàng)目中的資源文件并將編譯進(jìn)應(yīng)用程序中,包括圖片、字符串、菜單、界面布局、樣式等等,如圖 4-2所示。在向此目錄添加的資源文件,都會(huì)被gen/R.java自動(dòng)記錄。1src目錄source的簡(jiǎn)寫,存放源文件的目錄,即寫有代碼的以java為

2、后綴的文件。53gen目錄取自Generated Java Files的前3個(gè)英文單詞,存放ADT自動(dòng)生成的java文件,例如R.java和BuildConfig.java文件。這個(gè)目錄中的文件不建議作任何的改動(dòng),否則會(huì)出錯(cuò),或ADT會(huì)再次自動(dòng)生成。4bin目錄該目錄存放編譯器編譯之后產(chǎn)生的所有文件,其結(jié)構(gòu)如圖 4 4所示。包括dex文件(java編譯后生成的java字節(jié)碼文件)、resources.ap_(所有資源文件的集合,實(shí)際上是zip格式)、dexedLibs(對(duì)應(yīng)libs中引用的jar包)和可執(zhí)行apk文件等等。一個(gè)apk文件內(nèi)包含被編譯的代碼文件(.dex文件)、文件資源(res)

3、、assets、證書(certificates)和清單文件(manifest file),它基于zip文件格式。5assets目錄該目錄用來(lái)存放原始格式的文件,例如音頻文件、視頻文件等二進(jìn)制格式文件。此目錄中的資源不能被R.java文件索引,所以只能以字節(jié)流的形式讀取。一般情況下該目錄為空。6lib目錄lib是libraries的縮寫,存放程序中引用到的庫(kù),和bin/dexedLibs里面的目錄是一致的。比如要給一個(gè)應(yīng)用加入廣告,只要將廣告商提供的jar文件導(dǎo)入到該目錄下,調(diào)用該jar里的相應(yīng)方法就可以在程序中嵌入廣告了。7AndroidManifest.xml文件該文件是Android項(xiàng)目的

4、全局配置文件,記錄應(yīng)用中使用到各種全局的配置,是每個(gè) android程序中必須的文件。它位于整個(gè)項(xiàng)目的根目錄下,描述了程序中的全局?jǐn)?shù)據(jù),包括程序中用到的組件(activities、services等等),以及它們各自的實(shí)現(xiàn)類,各種能被處理的數(shù)據(jù)和啟動(dòng)位置等重要信息。8ic_launcher-web.png文件這是為了google Play市場(chǎng)使用展示的圖標(biāo),它需要的是512512的高分辨率圖標(biāo)。9proguard-project.txt和perties文件這兩個(gè)文件是為了保護(hù)Android項(xiàng)目而做的代碼混淆使用的。4.2 Android程序框架知識(shí)上一節(jié)我們了解了Andr

5、oid應(yīng)用程序的結(jié)構(gòu),熟悉了程序中所包含的目錄和文件。但是這些目錄和文件是如何相互作用,完成整個(gè)項(xiàng)目的功能呢?這就要求我們進(jìn)一步地探究Android程序的整個(gè)框架。在AndroidManifest.xml的application節(jié)點(diǎn),我們了解到程序由Activity、Service、Broadcastreceiver和Contentprovider 4部分組成。這也是Android系統(tǒng)的4個(gè)重要組件,這些組件間又通過(guò)Intent進(jìn)行交互。所有這些形成了Android程序框架核心內(nèi)容。4.2.1 Activity生命周期Activity的整個(gè)生命周期中有活動(dòng)、暫停、停止和非活動(dòng)四種狀態(tài)。活動(dòng)狀態(tài)

6、,是在棧頂?shù)腁ctivity,它是可視的、有焦點(diǎn)、可接受用戶輸入。Android試圖盡最大可能保持它活動(dòng)狀態(tài),殺死其它Activity來(lái)確保當(dāng)前活動(dòng)Activity有足夠的資源可使用。當(dāng)另外一個(gè)Activity被激活時(shí),它將被暫停。暫停狀態(tài),當(dāng)Activity失去焦點(diǎn),但仍然可見的狀態(tài),如被一個(gè)透明或者非全屏的Activity遮擋。若Activity變?yōu)橥耆[藏,它將會(huì)變成停止?fàn)顟B(tài)。這時(shí)Activity仍然在內(nèi)存中保存它所有的信息。停止?fàn)顟B(tài)的Activity將優(yōu)先被終止,因此Activity停止后一個(gè)很重要的工作就是要保存好程序數(shù)據(jù)和UI狀態(tài)。一旦Activity被用戶關(guān)閉,以及暫時(shí)或停止?fàn)顟B(tài)

7、的Activity被系統(tǒng)終止后,Activity便進(jìn)入到非活動(dòng)狀態(tài),它將被移除Activity棧?!纠?-2】Activity生命周期演示項(xiàng)目Ch4_2。該項(xiàng)目由MainActivity和OtherActivity兩個(gè)Activity組成(對(duì)應(yīng)兩個(gè)界面)。當(dāng)程序啟動(dòng)時(shí),運(yùn)行MainActivity,效果如圖 4-7所示。界面上有一個(gè)“切換到第二個(gè)界面”按鈕。單擊該按鈕后,運(yùn)行OtherActivity,出現(xiàn)圖 4-8所示界面。我們通過(guò)在生命周期事件函數(shù)里輸出相應(yīng)的信息(System.out.println)來(lái)查看它們執(zhí)行的順序。一個(gè)Android應(yīng)用程序通常由4類組件構(gòu)成:活動(dòng)(Activit

8、y)、服務(wù)(Service)、廣播接收器(BroadcastReceiver)和內(nèi)容提供器(ContentProvider)。但并不是每個(gè)Android應(yīng)用程序都必須包含這4類組件。除了Activity是必要部分外,其它的組件都是根據(jù)實(shí)際應(yīng)用需要是可選的。在AndroidManifest.xml中聲明可共享的組件,聲明后Android系統(tǒng)就可以利用這些組件實(shí)現(xiàn)程序內(nèi)部或程序間的模塊調(diào)用達(dá)到共享組件、解決代碼復(fù)用的問(wèn)題。4.2.2 Android組件1.Activity我們之前已經(jīng)接觸到多次的Activity了。它是Android中最基礎(chǔ)同時(shí)也是最重要的一個(gè)組件。一個(gè)Activity在程序中是獨(dú)

9、立運(yùn)行的,程序的當(dāng)前顯示界面即為一個(gè)Activity,多個(gè)Activity之間可以實(shí)現(xiàn)跳轉(zhuǎn)。它是用戶唯一可以看得到的東西。幾乎所有的Activity都與用戶進(jìn)行交互,所以Activity主要負(fù)責(zé)的就是創(chuàng)建顯示窗口,你可以在這些窗口里使用setContentView(View v)來(lái)顯示你自己的UI。2.ServiceService是Android系統(tǒng)中一個(gè)非常重要的應(yīng)用程序組件。Service的最大特點(diǎn)是它不可見,沒(méi)有象Activity那樣華麗的圖形化界面。這也是與Activity相比最大的區(qū)別。Service在程序后臺(tái)運(yùn)行,擁有自己獨(dú)立的生命周期,通常用來(lái)處理一些耗時(shí)長(zhǎng)的操作??梢允褂肧er

10、vice更新ContentPrivider,發(fā)送Intent以及啟動(dòng)系統(tǒng)的通知等等。但是Service不是一個(gè)單獨(dú)的進(jìn)程。也不是一個(gè)線程,如果Service里的代碼阻塞了,會(huì)導(dǎo)致整個(gè)應(yīng)用程序無(wú)響應(yīng)。每一個(gè)Sevvice在使用前與Activity一樣,要在AndroidManifest.xml文件里進(jìn)行聲明。具體使用方法我們將在第6章中進(jìn)行討論。3.BroadcastReceiverBroadcastReceiver是Android程序中的另一個(gè)重要的組件,其意為廣播接收器,作用在于接收并響應(yīng)Android應(yīng)用中產(chǎn)生的各種廣播消息。比如,當(dāng)手機(jī)收到一條短信的時(shí)候,這時(shí)候就會(huì)產(chǎn)生一個(gè)收到短信的事件

11、。它會(huì)向所有與它有關(guān)的已經(jīng)注冊(cè)的廣播接收器廣播這個(gè)事件。大部分廣播消息是由系統(tǒng)產(chǎn)生的,例如時(shí)區(qū)改變、電池電量低和語(yǔ)言選項(xiàng)改變等等。使用廣播接收器就必須先聲明,它有兩種聲明的方法,一種是在AndroidManifest.xml文件里聲明,另一種是用Java代碼中的registReceiver()方法。有關(guān)的詳細(xì)信息我們將在第6章中進(jìn)行具體討論。4.ContentProvider在Android中,每一個(gè)應(yīng)用程序運(yùn)行在各自的進(jìn)程中。當(dāng)一個(gè)程序需要訪問(wèn)另一個(gè)應(yīng)用程序的數(shù)據(jù)時(shí),即在不同的虛擬機(jī)之間進(jìn)行傳遞數(shù)據(jù)時(shí),可以借助ContentProvider實(shí)現(xiàn)數(shù)據(jù)的交換,達(dá)到在不同的應(yīng)用程序之間共享數(shù)據(jù)。上

12、一節(jié)我們介紹了Android的四類組件。這四類組件是相互獨(dú)立的,它們之間可以互相調(diào)用,協(xié)調(diào)工作,最終組成一個(gè)真正的Android應(yīng)用。而要完成這些組件之間的通訊,則主要是由Intent協(xié)助完成。Intent是一種輕量級(jí)的消息傳遞機(jī)制,這種消息描述了應(yīng)用中一次操作的動(dòng)作、動(dòng)作涉及數(shù)據(jù)、附加數(shù)據(jù)。Android系統(tǒng)根據(jù)此Intent的描述,負(fù)責(zé)找到對(duì)應(yīng)的組件,并將 Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。Intent對(duì)象包含要接收此Intent組件需要的信息(例如需要的動(dòng)作和動(dòng)作需要的信息)和 android 系統(tǒng)需要的信息(要處理此Intent的組件的類別和怎樣啟動(dòng)它)。每個(gè)組成部分都有

13、相應(yīng)的屬性表示,并提供設(shè)置和獲取相應(yīng)屬性的方法,如表4-2所示:一個(gè)intent filter是一個(gè)IntentFilter類的實(shí)例。但是android系統(tǒng)必須在組件未啟動(dòng)的情況下就知道它的能力,因此intent filter一般不會(huì)在java代碼中設(shè)置,而是在應(yīng)用的AndroidManifest.xml文件中作為元素的方式聲明。Activitie、Service和BroadcastReceiver可設(shè)置一個(gè)或者多個(gè)intent filter過(guò)濾器,來(lái)告訴Android系統(tǒng)哪個(gè)intent它們可以處理。每個(gè)過(guò)濾器描述了組件的一種能力,它過(guò)濾掉不想要的intent,留下想要的。一個(gè)intent

14、filter中包含一個(gè)intent對(duì)象中的三個(gè)屬性Action、Data和Catrgory,而Extra和Flag等屬性在這方面不起作用。1.子元素一個(gè)Intent對(duì)象只能命名一個(gè)Action,但是一個(gè)intent filter過(guò)濾器則可以列出多個(gè)action,如: 2.子元素要通過(guò)category測(cè)試,Intent對(duì)象中包含的每個(gè)category必須匹配filter中的一個(gè)。filter可以列出額外的category,但是不能遺漏intent對(duì)象中包含的任意一個(gè)category。下面是一個(gè)示例: 3.子元素?cái)?shù)據(jù)在中的描述如下: 元素指定了希望接受的Intent請(qǐng)求的數(shù)據(jù)URI和數(shù)據(jù)類型mim

15、eType,其中URI由scheme、host、path和port組成。4.3 程序調(diào)試也許你只花了一個(gè)星期的時(shí)間去完成一個(gè)程序,但是或許你得花上一個(gè)月甚至更久去調(diào)試一個(gè)程序。出現(xiàn)的錯(cuò)誤各種各樣,調(diào)試的方法也因個(gè)人習(xí)慣會(huì)有所不同。但是要想在錯(cuò)誤面前馬上解決問(wèn)題,那就得有一個(gè)好的調(diào)試工具,在Android中,自然是少不了這些工具。adb的全稱為Android Debug Bridge,是起到調(diào)試橋的作用,用來(lái)管理模擬器和真機(jī)的通用調(diào)試工具。該工具功能強(qiáng)大,直接通過(guò)命令行使用adb命令。通過(guò)adb我們可以在Eclipse中通過(guò)DDMS來(lái)調(diào)試Android程序,因此它是debug工具,借助它我們可以

16、管理設(shè)備或手機(jī)模擬器的狀態(tài),還可以進(jìn)行很多手機(jī)操作,如安裝軟件、系統(tǒng)升級(jí)、運(yùn)行shell命令等等。4.3.2 Logcat調(diào)試異常也稱為例外,是在程序運(yùn)行中發(fā)生的、會(huì)打斷程序正常執(zhí)行的事件。Java類庫(kù)包含了系統(tǒng)定義的常見異常類,例如算術(shù)異常(ArithmeticException),如除數(shù)為0;沒(méi)有給對(duì)象開辟內(nèi)存空間時(shí)會(huì)出現(xiàn)空指針異常(NullPointerException);找不到文件異常(FileNotFoundException);數(shù)組訪問(wèn)下標(biāo)越界(ArrayIndexOutOfBoundsException)等等。當(dāng)然,用戶程序中特定的異常也可以通過(guò)用戶自定義的異常類來(lái)進(jìn)行處理。在

17、例4-2中,我們已經(jīng)應(yīng)用Logcat來(lái)查看程序的運(yùn)行信息。LogCat是用來(lái)獲取系統(tǒng)日志信息的工具,并可以顯示在Eclipse集成開發(fā)環(huán)境中。能夠捕獲的信息包括Dalvik虛擬機(jī)產(chǎn)生的信息、進(jìn)程信息、ActivityManager信息、PackagerManager信息、Homeloader 信息、WindowsManager信息、Android運(yùn)行時(shí)信息和應(yīng)用程序信息等等。在使用Logcat之前需要先打開Logcat視圖,在菜單欄選擇Window-Show View-Other-Android-Logcat-OK即可打開,見圖4-14所示。在例4-2中,我們已經(jīng)應(yīng)用Logcat來(lái)查看程序的運(yùn)行信息。LogCat是用來(lái)獲取系統(tǒng)日志信息的工具,并可以顯示在Eclipse集成開發(fā)環(huán)境中。能夠捕獲的信息包括Dalvik虛擬機(jī)產(chǎn)生的信息、進(jìn)程信息、ActivityManager信息、PackagerManager信息、Homeloader 信息、WindowsManager信息、Android運(yùn)行時(shí)信息和應(yīng)用程序信息等等。在使用Logcat之前需要先打開Logcat視圖,在菜單欄選擇Window-Show View-Other-Android-Logcat-OK即可打開,見圖4-14所示。4.3.3 Dev ToolsDev Tools是用于調(diào)試和

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論