Android開發(fā)之旅(3):應用程序基礎及組件_第1頁
Android開發(fā)之旅(3):應用程序基礎及組件_第2頁
Android開發(fā)之旅(3):應用程序基礎及組件_第3頁
Android開發(fā)之旅(3):應用程序基礎及組件_第4頁
Android開發(fā)之旅(3):應用程序基礎及組件_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、引言為了后面的例子做準備,本篇及接下來幾篇將介紹Android應用程序的原理及術(shù)語,這些也是作為一個Android的開發(fā)人員必須要了解,且深刻理解的東西。本篇的主題如下:1、應用程序基礎2、應用程序組件2.1、活動(Activities)2.2、服務(Services)2.3、廣播接收者(Broadcastreceivers)2.4、內(nèi)容提供者(Contentproviders)因為這些內(nèi)容比較理論,且沒有用例子來說明,看上去會比較枯燥,我就把這幾篇寫得算比較短,方便大家吸收。1、應用程序基礎Android應用程序是用Java編程語言寫的。編譯后的Java代碼包括應用程序要求的任何數(shù)據(jù)和資源文

2、件,通過aapt工具捆綁成一個Android包,歸檔文件以.apk為后綴。這個文件是分發(fā)應用程序和安裝到移動設備的中介或工具,用戶下載這個文件到他們的設備上。一個.apk文件中的所有代碼被認為是一個應用程序。aaptaapt是AndroidAssetPackagingTool的首字母縮寫,這個工具包含在SDK的tools/目錄下。查看、創(chuàng)建、更新與zip兼容的歸檔文件(zip、jar、apk)。它也能將資源文件編譯成二進制包。盡管你可能不會經(jīng)常直接使用appt,但是構(gòu)建腳本(buildscripts)和IDE插件會使用這個工具打包apk文件,構(gòu)成一個Android應用程序。如需更詳細的使用細節(jié)

3、,打開一個終端,進入tools/目錄下,運行命令:.Linux或Mac操作系統(tǒng):./aapt.Windows:aapt.exe注意:tools/目錄是指androidSDK目錄下的/platforms/android-X/tools/在許多方面,每個Android應用程序生活在它自己的世界:默認情況下,每一個應用程序運行在它自己的Linux進程中。當應用程序中的任何代碼需要執(zhí)行時,Android將啟動進程;當它不在需要和系統(tǒng)資源被其他應用程序請求時,Android將關閉進程。每個應用程序都有他自己的Java虛擬機(VM),因此應用程序代碼獨立于其他所有應用程序的代碼運行。默認情況下,每個應用程

4、序分配一個唯一的Linux用戶的ID。權(quán)限設置為每個應用程序的文件僅對用戶和應用程序本身可見雖然也有一些方法可以暴露他們給其他應用程序。有可能設置兩個應用程序共享一個用戶ID,這種情況下,他們能夠看到對方的文件。為了節(jié)省系統(tǒng)資源,具有相同ID的應用程序也可以安排在同一個Linux進程中,共享同一個VM。2、應用程序組件Android的一個主要特點是,一個應用程序可以利用其他應用程序的元素(假設這些應用程序允許的話)。例如,如果你的應用程序需要顯示一個圖像的滾動列表,且其他應用程序已經(jīng)開發(fā)了一個合適的滾動條并可以提供給別的應用程序用,你可以調(diào)用這個滾動條來工作,而不用自己開發(fā)一個。你的應用程序不

5、用并入其他應用程序的代碼或鏈接到它。相反,當需求產(chǎn)生時它只是啟動其他應用程序塊。對于這個工作,當應用程序的任何部分被請求時,系統(tǒng)必須能夠啟動一個應用程序的進程,并實例化該部分的Java對象。因此,不像其他大多數(shù)系統(tǒng)的應用程序,Android應用程序沒有一個單一的入口點(例如,沒有main。函數(shù))。相反,系統(tǒng)能夠?qū)嵗瓦\行需要幾個必要的組件。有四種類型的組件:活動(Activities)服務(Services)廣播接收者(Broadcastreceivers)內(nèi)容提供者(Contentproviders)然而,并不是所有的應用程序都必須包含上面的四個部分,你的應用程序可以由上面的一個或幾個來組

6、建。當你決定使用以上哪些組件來構(gòu)建Android應用程序時,你應該將它們列在AndroidManifest.xml文件中,在這個文件中你可以聲明應用程序組件以及它們的特性和要求。關于AndroidManifest.xml在Android開發(fā)之旅:HelloWorld項目的目錄結(jié)構(gòu)的1.6、AndroidManifest.xml簡單介紹了一下,你可以參考一下,下篇也將介紹它。2.1、活動(Activities)一個活動表示一個可視化的用戶界面,關注一個用戶從事的事件。例如,一個活動可能表示一個用戶可選擇的菜單項列表,或者可能顯示照片連同它的標題。一個文本短信應用程序可能有一個活動,顯示聯(lián)系人的名

7、單發(fā)送信息;第二個活動,寫信息給選定的聯(lián)系人;其他活動,重新查看舊信息或更改設置。雖然他們一起工作形成一個整體的用戶界面,但是每個活動是獨立于其他活動的。每一個都是作為Activity基類的一個子類的實現(xiàn)。android.app.Activity類:因為幾乎所有的活動(activities)都是與用戶交互的,所以Activity類關注創(chuàng)建窗口,你可以用方法setContentView(View)將自己的UI放到里面。然而活動通常以全屏的方式展示給用戶,也可以以浮動窗口或嵌入在另外一個活動中。有兩個方法是幾乎所有的Activity子類都實現(xiàn)的:onCreate(Bundle):初始化你的活動(A

8、ctivity),比如完成一些圖形的繪制。最重要的是,在這個方法里你通常將用布局資源(layoutresource)調(diào)用setContentView(int)方法定義你的UI,和用findViewByld(int)在你的UI中檢索你需要編程地交互的小部件(widgets)。setContentView指定由哪個文件指定布局(main.xml),可以將這個界面顯示出來,然后我們進行相關操作,我們的操作會被包裝成為一個意圖(Intent),然后這個意圖對應有相關的activity進行處理。onPause():處理當離開你的活動時要做的事情。最重要的是,用戶做的所有改變應該在這里提交(通常Conte

9、ntProvider保存數(shù)據(jù))。一個應用程序可能只包含一個活動,或者像剛才提到的短信應用,它可能包含幾個活動。這些活動是什么,以及有多少,當然這取決于它的應用和設計。一般來講,當應用程序被啟動時,被標記為第一個的活動應該展示給用戶。從一個活動移動到另一個活動由當前的活動完成開始下一個。每一個活動都有一個默認的窗口。一般來講,窗口會填滿整個屏幕,但是它可能比屏幕小或浮在其他窗口上。一個活動還可以使用額外的窗口例如彈出式對話框,或當一用戶選擇屏幕上一個特定的項時一個窗口顯示給用戶重要的信息。窗口的可視內(nèi)容是由繼承自View基類的一個分層的視圖一對象提供。每個視圖控件是窗口內(nèi)的一個特定的矩形空間。父

10、視圖包含和組織子女視圖的布局。葉子視圖(在分層的底層)繪制的矩形直接控制和響應用戶的操作。因此,一個視圖是活動與用戶交互發(fā)生的地方。例如,一個視圖可能顯示一個小的圖片和當用戶點擊圖片時發(fā)起一個行為。Android有一些現(xiàn)成的視圖你可以使用,包括按鈕(buttons)、文本域(textfields)、滾動條(scrollbars)、菜單項(menuitems)、復選框(checkboxes)等等。通過Activity.setContentView()方法放置一個視圖層次在一個活動窗口中。內(nèi)容視圖(contentview)是層次結(jié)構(gòu)的根視圖對象。層次結(jié)構(gòu)如下圖所示:圖1、視圖的層次結(jié)構(gòu)Activi

11、ty.setContentView()方法:publicvoidsetContentView(intlayoutResID):根據(jù)布局資源設置活動的界面。資源將被夸大,添加布局資源文件中所有的最高層的視圖(top-levelviews)到活動.22、服務(Services)一個服務沒有一個可視化用戶界面,而是在后臺無期限地運行。例如一個服務可能是播放背景音樂而用戶做其他一些事情,或者它可能從網(wǎng)絡獲取數(shù)據(jù),或計算一些東西并提供結(jié)果給需要的活動(activities)。每個服務都繼承自Service基類。每個服務類在AndroidManifest.xml中有相應的service聲明。服務可以通過C

12、ontext.startService()和Context.bindService()啟動。一個典型的例子是一個媒體播放器播放一個播放列表中的歌曲。該播放器應用程序?qū)⒖赡苡幸粋€或多個活動(activities),允許用戶選擇歌曲和開始播放。然而,音樂播放本身不會被一個活動處理,因為用戶希望保持音樂繼續(xù)播放,當用戶離開播放器去做其他事情時。為了保持音樂繼續(xù)播放,媒體播放器活動可以啟動一個服務運行在后臺。系統(tǒng)將保持音樂播放服務運行,甚至媒體播放器離開屏幕時??梢赃B接到(綁定到)一個持續(xù)運行的服務(并啟動服務,如果它尚未運行)。連接之后,你可以通過服務暴露的接口與服務交流。對于音樂服務,這個接口可以

13、允許用戶暫停、倒帶、停止和重新播放。像活動(activities)和其他組件一樣,服務(services)運行在應用程序進程中的主線程中。因此,他們將不會阻止其他組件或用戶界面,他們往往產(chǎn)生其他一些耗時的任務(如音樂播放)。23、廣播接收者(Broadcastreceivers)一個廣播接收者是這樣一個組件,它不做什么事,僅是接受廣播公告并作出相應的反應。許多廣播源自于系統(tǒng)代碼,例如公告時區(qū)的改變、電池電量低、已采取圖片、用戶改變了語言偏好。應用程序也可以發(fā)起廣播,例如為了他其他程序知道某些數(shù)據(jù)已經(jīng)下載到設備且他們可以使用這些數(shù)據(jù)。一個應用程序可以有任意數(shù)量的廣播接收者去反應任何它認為重要的公

14、告。所有的接受者繼承自BroadcastReceiver基類。BroadcastReceiver類:是接受sendBroadcast()發(fā)送的意圖(intents)的基類??梢杂肅ontext.registerReceiver()動態(tài)地注冊這個類的實例,或者通過AndroidManifest.xml中receiver標簽靜態(tài)發(fā)布。注意:如果你在Activity.onResumeO注冊一個接受者,你應該在Activity.onPause()注銷它。因為當暫停時你不會收到意圖,注銷它將削減不必要的系統(tǒng)開銷。不要在Activity.onSaveInstanceState0中注銷它,因為它將不會被調(diào)用

15、,如果用戶移動到先前的堆棧。有兩種主要的可接受廣播類型:正常廣播(由Context.sendBroadcast發(fā)送)是完全異步的。所有的廣播接收者以無序方式運行,往往在同一時間接收。這樣效率較高,但是意味著接受者不能使用結(jié)果或終止廣播數(shù)據(jù)傳播。有序廣播(由Context.sendOrderedBroadcast發(fā)送)一次傳遞給一個接收者。由于每個接收者依次執(zhí)行,因此它可以傳播到下一個接收器,也可以完全終止傳播以便他不會傳遞給其他接收者。接收者的運行順序可由匹配的意圖過濾器intent-filter)的android:priority屬性控制。廣播接收者不顯示一個用戶界面。然而,它們啟動一個活動

16、去響應收到的信息,或者他們可能使用NotificationManager去通知用戶。通知可以使用多種方式獲得用戶的注意閃爍的背光、振動設備、播放聲音等等。典型的是放在一個持久的圖標在狀態(tài)欄,用戶可以打開獲取信息。24、內(nèi)容提供者(Contentproviders)內(nèi)容提供者(contentprovider)使一個應用程序的指定數(shù)據(jù)集提供給其他應用程序。這些數(shù)據(jù)可以存儲在文件系統(tǒng)中、在一個SQLite數(shù)據(jù)庫、或以任何其他合理的方式。內(nèi)容提供者繼承自ContentProvider基類并實現(xiàn)了一個標準的方法集,使得其他應用程序可以檢索和存儲數(shù)據(jù)。然而,應用程序并不直接調(diào)用這些方法。相反,替代的是它們

17、使用一個3ontentResolver對象并調(diào)用它的方法。ContentResolver能與任何內(nèi)容提供者通信,它與提供者合作來管理參與進來的進程間的通信。內(nèi)容提供者是Android應用程序的主要組成部分之一,提供內(nèi)容給應用程序。他們封裝數(shù)據(jù)且通過單個ContentResolver接口提供給應用程序。只有需要在多個應用程序間共享數(shù)據(jù)是才需要內(nèi)容提供者。例如,通訊錄數(shù)據(jù)被多個應用程序使用,且必須存儲在一個內(nèi)容提供者中。如果你不需要在多個應用程序間共享數(shù)據(jù),你可以直接使用SQLiteDataBase。當ContentResolver發(fā)出一個請求時,系統(tǒng)檢查給定的URI的權(quán)限并傳遞請求給內(nèi)容提供者注冊。內(nèi)容提供者能理解URI想要的東西。UriMatcher類用于幫組解析URIs。需要實現(xiàn)的方法主要如下:insert(Uri,update(Uri,在的數(shù)據(jù)delete(Uri,query(Uri,String,String,String,String)返回數(shù)據(jù)給調(diào)用者ContentValues)插入數(shù)據(jù)到內(nèi)容提供者Con

溫馨提示

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

評論

0/150

提交評論