




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、引言為了后面的例子做準(zhǔn)備,本篇及接下來(lái)幾篇將介紹Android應(yīng)用程序的原理及術(shù)語(yǔ),這些也是作為一個(gè)Android的開(kāi)發(fā)人員必須要了解,且深刻理解的東西。本篇的主題如下:1、應(yīng)用程序基礎(chǔ)2、應(yīng)用程序組件2.1、活動(dòng)(Activities)2.2、服務(wù)(Services)2.3、廣播接收者(Broadcastreceivers)2.4、內(nèi)容提供者(Contentproviders)因?yàn)檫@些內(nèi)容比較理論,且沒(méi)有用例子來(lái)說(shuō)明,看上去會(huì)比較枯燥,我就把這幾篇寫(xiě)得算比較短,方便大家吸收。1、應(yīng)用程序基礎(chǔ)Android應(yīng)用程序是用Java編程語(yǔ)言寫(xiě)的。編譯后的Java代碼包括應(yīng)用程序要求的任何數(shù)據(jù)和資源文
2、件,通過(guò)aapt工具捆綁成一個(gè)Android包,歸檔文件以.apk為后綴。這個(gè)文件是分發(fā)應(yīng)用程序和安裝到移動(dòng)設(shè)備的中介或工具,用戶下載這個(gè)文件到他們的設(shè)備上。一個(gè).apk文件中的所有代碼被認(rèn)為是一個(gè)應(yīng)用程序。aaptaapt是AndroidAssetPackagingTool的首字母縮寫(xiě),這個(gè)工具包含在SDK的tools/目錄下。查看、創(chuàng)建、更新與zip兼容的歸檔文件(zip、jar、apk)。它也能將資源文件編譯成二進(jìn)制包。盡管你可能不會(huì)經(jīng)常直接使用appt,但是構(gòu)建腳本(buildscripts)和IDE插件會(huì)使用這個(gè)工具打包apk文件,構(gòu)成一個(gè)Android應(yīng)用程序。如需更詳細(xì)的使用細(xì)節(jié)
3、,打開(kāi)一個(gè)終端,進(jìn)入tools/目錄下,運(yùn)行命令:.Linux或Mac操作系統(tǒng):./aapt.Windows:aapt.exe注意:tools/目錄是指androidSDK目錄下的/platforms/android-X/tools/在許多方面,每個(gè)Android應(yīng)用程序生活在它自己的世界:默認(rèn)情況下,每一個(gè)應(yīng)用程序運(yùn)行在它自己的Linux進(jìn)程中。當(dāng)應(yīng)用程序中的任何代碼需要執(zhí)行時(shí),Android將啟動(dòng)進(jìn)程;當(dāng)它不在需要和系統(tǒng)資源被其他應(yīng)用程序請(qǐng)求時(shí),Android將關(guān)閉進(jìn)程。每個(gè)應(yīng)用程序都有他自己的Java虛擬機(jī)(VM),因此應(yīng)用程序代碼獨(dú)立于其他所有應(yīng)用程序的代碼運(yùn)行。默認(rèn)情況下,每個(gè)應(yīng)用程
4、序分配一個(gè)唯一的Linux用戶的ID。權(quán)限設(shè)置為每個(gè)應(yīng)用程序的文件僅對(duì)用戶和應(yīng)用程序本身可見(jiàn)雖然也有一些方法可以暴露他們給其他應(yīng)用程序。有可能設(shè)置兩個(gè)應(yīng)用程序共享一個(gè)用戶ID,這種情況下,他們能夠看到對(duì)方的文件。為了節(jié)省系統(tǒng)資源,具有相同ID的應(yīng)用程序也可以安排在同一個(gè)Linux進(jìn)程中,共享同一個(gè)VM。2、應(yīng)用程序組件Android的一個(gè)主要特點(diǎn)是,一個(gè)應(yīng)用程序可以利用其他應(yīng)用程序的元素(假設(shè)這些應(yīng)用程序允許的話)。例如,如果你的應(yīng)用程序需要顯示一個(gè)圖像的滾動(dòng)列表,且其他應(yīng)用程序已經(jīng)開(kāi)發(fā)了一個(gè)合適的滾動(dòng)條并可以提供給別的應(yīng)用程序用,你可以調(diào)用這個(gè)滾動(dòng)條來(lái)工作,而不用自己開(kāi)發(fā)一個(gè)。你的應(yīng)用程序不
5、用并入其他應(yīng)用程序的代碼或鏈接到它。相反,當(dāng)需求產(chǎn)生時(shí)它只是啟動(dòng)其他應(yīng)用程序塊。對(duì)于這個(gè)工作,當(dāng)應(yīng)用程序的任何部分被請(qǐng)求時(shí),系統(tǒng)必須能夠啟動(dòng)一個(gè)應(yīng)用程序的進(jìn)程,并實(shí)例化該部分的Java對(duì)象。因此,不像其他大多數(shù)系統(tǒng)的應(yīng)用程序,Android應(yīng)用程序沒(méi)有一個(gè)單一的入口點(diǎn)(例如,沒(méi)有main。函數(shù))。相反,系統(tǒng)能夠?qū)嵗瓦\(yùn)行需要幾個(gè)必要的組件。有四種類(lèi)型的組件:活動(dòng)(Activities)服務(wù)(Services)廣播接收者(Broadcastreceivers)內(nèi)容提供者(Contentproviders)然而,并不是所有的應(yīng)用程序都必須包含上面的四個(gè)部分,你的應(yīng)用程序可以由上面的一個(gè)或幾個(gè)來(lái)組
6、建。當(dāng)你決定使用以上哪些組件來(lái)構(gòu)建Android應(yīng)用程序時(shí),你應(yīng)該將它們列在AndroidManifest.xml文件中,在這個(gè)文件中你可以聲明應(yīng)用程序組件以及它們的特性和要求。關(guān)于AndroidManifest.xml在Android開(kāi)發(fā)之旅:HelloWorld項(xiàng)目的目錄結(jié)構(gòu)的1.6、AndroidManifest.xml簡(jiǎn)單介紹了一下,你可以參考一下,下篇也將介紹它。2.1、活動(dòng)(Activities)一個(gè)活動(dòng)表示一個(gè)可視化的用戶界面,關(guān)注一個(gè)用戶從事的事件。例如,一個(gè)活動(dòng)可能表示一個(gè)用戶可選擇的菜單項(xiàng)列表,或者可能顯示照片連同它的標(biāo)題。一個(gè)文本短信應(yīng)用程序可能有一個(gè)活動(dòng),顯示聯(lián)系人的名
7、單發(fā)送信息;第二個(gè)活動(dòng),寫(xiě)信息給選定的聯(lián)系人;其他活動(dòng),重新查看舊信息或更改設(shè)置。雖然他們一起工作形成一個(gè)整體的用戶界面,但是每個(gè)活動(dòng)是獨(dú)立于其他活動(dòng)的。每一個(gè)都是作為Activity基類(lèi)的一個(gè)子類(lèi)的實(shí)現(xiàn)。android.app.Activity類(lèi):因?yàn)閹缀跛械幕顒?dòng)(activities)都是與用戶交互的,所以Activity類(lèi)關(guān)注創(chuàng)建窗口,你可以用方法setContentView(View)將自己的UI放到里面。然而活動(dòng)通常以全屏的方式展示給用戶,也可以以浮動(dòng)窗口或嵌入在另外一個(gè)活動(dòng)中。有兩個(gè)方法是幾乎所有的Activity子類(lèi)都實(shí)現(xiàn)的:onCreate(Bundle):初始化你的活動(dòng)(A
8、ctivity),比如完成一些圖形的繪制。最重要的是,在這個(gè)方法里你通常將用布局資源(layoutresource)調(diào)用setContentView(int)方法定義你的UI,和用findViewByld(int)在你的UI中檢索你需要編程地交互的小部件(widgets)。setContentView指定由哪個(gè)文件指定布局(main.xml),可以將這個(gè)界面顯示出來(lái),然后我們進(jìn)行相關(guān)操作,我們的操作會(huì)被包裝成為一個(gè)意圖(Intent),然后這個(gè)意圖對(duì)應(yīng)有相關(guān)的activity進(jìn)行處理。onPause():處理當(dāng)離開(kāi)你的活動(dòng)時(shí)要做的事情。最重要的是,用戶做的所有改變應(yīng)該在這里提交(通常Conte
9、ntProvider保存數(shù)據(jù))。一個(gè)應(yīng)用程序可能只包含一個(gè)活動(dòng),或者像剛才提到的短信應(yīng)用,它可能包含幾個(gè)活動(dòng)。這些活動(dòng)是什么,以及有多少,當(dāng)然這取決于它的應(yīng)用和設(shè)計(jì)。一般來(lái)講,當(dāng)應(yīng)用程序被啟動(dòng)時(shí),被標(biāo)記為第一個(gè)的活動(dòng)應(yīng)該展示給用戶。從一個(gè)活動(dòng)移動(dòng)到另一個(gè)活動(dòng)由當(dāng)前的活動(dòng)完成開(kāi)始下一個(gè)。每一個(gè)活動(dòng)都有一個(gè)默認(rèn)的窗口。一般來(lái)講,窗口會(huì)填滿整個(gè)屏幕,但是它可能比屏幕小或浮在其他窗口上。一個(gè)活動(dòng)還可以使用額外的窗口例如彈出式對(duì)話框,或當(dāng)一用戶選擇屏幕上一個(gè)特定的項(xiàng)時(shí)一個(gè)窗口顯示給用戶重要的信息。窗口的可視內(nèi)容是由繼承自View基類(lèi)的一個(gè)分層的視圖一對(duì)象提供。每個(gè)視圖控件是窗口內(nèi)的一個(gè)特定的矩形空間。父
10、視圖包含和組織子女視圖的布局。葉子視圖(在分層的底層)繪制的矩形直接控制和響應(yīng)用戶的操作。因此,一個(gè)視圖是活動(dòng)與用戶交互發(fā)生的地方。例如,一個(gè)視圖可能顯示一個(gè)小的圖片和當(dāng)用戶點(diǎn)擊圖片時(shí)發(fā)起一個(gè)行為。Android有一些現(xiàn)成的視圖你可以使用,包括按鈕(buttons)、文本域(textfields)、滾動(dòng)條(scrollbars)、菜單項(xiàng)(menuitems)、復(fù)選框(checkboxes)等等。通過(guò)Activity.setContentView()方法放置一個(gè)視圖層次在一個(gè)活動(dòng)窗口中。內(nèi)容視圖(contentview)是層次結(jié)構(gòu)的根視圖對(duì)象。層次結(jié)構(gòu)如下圖所示:圖1、視圖的層次結(jié)構(gòu)Activi
11、ty.setContentView()方法:publicvoidsetContentView(intlayoutResID):根據(jù)布局資源設(shè)置活動(dòng)的界面。資源將被夸大,添加布局資源文件中所有的最高層的視圖(top-levelviews)到活動(dòng).22、服務(wù)(Services)一個(gè)服務(wù)沒(méi)有一個(gè)可視化用戶界面,而是在后臺(tái)無(wú)期限地運(yùn)行。例如一個(gè)服務(wù)可能是播放背景音樂(lè)而用戶做其他一些事情,或者它可能從網(wǎng)絡(luò)獲取數(shù)據(jù),或計(jì)算一些東西并提供結(jié)果給需要的活動(dòng)(activities)。每個(gè)服務(wù)都繼承自Service基類(lèi)。每個(gè)服務(wù)類(lèi)在AndroidManifest.xml中有相應(yīng)的service聲明。服務(wù)可以通過(guò)C
12、ontext.startService()和Context.bindService()啟動(dòng)。一個(gè)典型的例子是一個(gè)媒體播放器播放一個(gè)播放列表中的歌曲。該播放器應(yīng)用程序?qū)⒖赡苡幸粋€(gè)或多個(gè)活動(dòng)(activities),允許用戶選擇歌曲和開(kāi)始播放。然而,音樂(lè)播放本身不會(huì)被一個(gè)活動(dòng)處理,因?yàn)橛脩粝M3忠魳?lè)繼續(xù)播放,當(dāng)用戶離開(kāi)播放器去做其他事情時(shí)。為了保持音樂(lè)繼續(xù)播放,媒體播放器活動(dòng)可以啟動(dòng)一個(gè)服務(wù)運(yùn)行在后臺(tái)。系統(tǒng)將保持音樂(lè)播放服務(wù)運(yùn)行,甚至媒體播放器離開(kāi)屏幕時(shí)??梢赃B接到(綁定到)一個(gè)持續(xù)運(yùn)行的服務(wù)(并啟動(dòng)服務(wù),如果它尚未運(yùn)行)。連接之后,你可以通過(guò)服務(wù)暴露的接口與服務(wù)交流。對(duì)于音樂(lè)服務(wù),這個(gè)接口可以
13、允許用戶暫停、倒帶、停止和重新播放。像活動(dòng)(activities)和其他組件一樣,服務(wù)(services)運(yùn)行在應(yīng)用程序進(jìn)程中的主線程中。因此,他們將不會(huì)阻止其他組件或用戶界面,他們往往產(chǎn)生其他一些耗時(shí)的任務(wù)(如音樂(lè)播放)。23、廣播接收者(Broadcastreceivers)一個(gè)廣播接收者是這樣一個(gè)組件,它不做什么事,僅是接受廣播公告并作出相應(yīng)的反應(yīng)。許多廣播源自于系統(tǒng)代碼,例如公告時(shí)區(qū)的改變、電池電量低、已采取圖片、用戶改變了語(yǔ)言偏好。應(yīng)用程序也可以發(fā)起廣播,例如為了他其他程序知道某些數(shù)據(jù)已經(jīng)下載到設(shè)備且他們可以使用這些數(shù)據(jù)。一個(gè)應(yīng)用程序可以有任意數(shù)量的廣播接收者去反應(yīng)任何它認(rèn)為重要的公
14、告。所有的接受者繼承自BroadcastReceiver基類(lèi)。BroadcastReceiver類(lèi):是接受sendBroadcast()發(fā)送的意圖(intents)的基類(lèi)??梢杂肅ontext.registerReceiver()動(dòng)態(tài)地注冊(cè)這個(gè)類(lèi)的實(shí)例,或者通過(guò)AndroidManifest.xml中receiver標(biāo)簽靜態(tài)發(fā)布。注意:如果你在Activity.onResumeO注冊(cè)一個(gè)接受者,你應(yīng)該在Activity.onPause()注銷(xiāo)它。因?yàn)楫?dāng)暫停時(shí)你不會(huì)收到意圖,注銷(xiāo)它將削減不必要的系統(tǒng)開(kāi)銷(xiāo)。不要在Activity.onSaveInstanceState0中注銷(xiāo)它,因?yàn)樗鼘⒉粫?huì)被調(diào)用
15、,如果用戶移動(dòng)到先前的堆棧。有兩種主要的可接受廣播類(lèi)型:正常廣播(由Context.sendBroadcast發(fā)送)是完全異步的。所有的廣播接收者以無(wú)序方式運(yùn)行,往往在同一時(shí)間接收。這樣效率較高,但是意味著接受者不能使用結(jié)果或終止廣播數(shù)據(jù)傳播。有序廣播(由Context.sendOrderedBroadcast發(fā)送)一次傳遞給一個(gè)接收者。由于每個(gè)接收者依次執(zhí)行,因此它可以傳播到下一個(gè)接收器,也可以完全終止傳播以便他不會(huì)傳遞給其他接收者。接收者的運(yùn)行順序可由匹配的意圖過(guò)濾器intent-filter)的android:priority屬性控制。廣播接收者不顯示一個(gè)用戶界面。然而,它們啟動(dòng)一個(gè)活動(dòng)
16、去響應(yīng)收到的信息,或者他們可能使用NotificationManager去通知用戶。通知可以使用多種方式獲得用戶的注意閃爍的背光、振動(dòng)設(shè)備、播放聲音等等。典型的是放在一個(gè)持久的圖標(biāo)在狀態(tài)欄,用戶可以打開(kāi)獲取信息。24、內(nèi)容提供者(Contentproviders)內(nèi)容提供者(contentprovider)使一個(gè)應(yīng)用程序的指定數(shù)據(jù)集提供給其他應(yīng)用程序。這些數(shù)據(jù)可以存儲(chǔ)在文件系統(tǒng)中、在一個(gè)SQLite數(shù)據(jù)庫(kù)、或以任何其他合理的方式。內(nèi)容提供者繼承自ContentProvider基類(lèi)并實(shí)現(xiàn)了一個(gè)標(biāo)準(zhǔn)的方法集,使得其他應(yīng)用程序可以檢索和存儲(chǔ)數(shù)據(jù)。然而,應(yīng)用程序并不直接調(diào)用這些方法。相反,替代的是它們
17、使用一個(gè)3ontentResolver對(duì)象并調(diào)用它的方法。ContentResolver能與任何內(nèi)容提供者通信,它與提供者合作來(lái)管理參與進(jìn)來(lái)的進(jìn)程間的通信。內(nèi)容提供者是Android應(yīng)用程序的主要組成部分之一,提供內(nèi)容給應(yīng)用程序。他們封裝數(shù)據(jù)且通過(guò)單個(gè)ContentResolver接口提供給應(yīng)用程序。只有需要在多個(gè)應(yīng)用程序間共享數(shù)據(jù)是才需要內(nèi)容提供者。例如,通訊錄數(shù)據(jù)被多個(gè)應(yīng)用程序使用,且必須存儲(chǔ)在一個(gè)內(nèi)容提供者中。如果你不需要在多個(gè)應(yīng)用程序間共享數(shù)據(jù),你可以直接使用SQLiteDataBase。當(dāng)ContentResolver發(fā)出一個(gè)請(qǐng)求時(shí),系統(tǒng)檢查給定的URI的權(quán)限并傳遞請(qǐng)求給內(nèi)容提供者注冊(cè)。內(nèi)容提供者能理解URI想要的東西。UriMatcher類(lèi)用于幫組解析URIs。需要實(shí)現(xiàn)的方法主要如下:insert(Uri,update(Uri,在的數(shù)據(jù)delete(Uri,query(Uri,String,String,String,String)返回?cái)?shù)據(jù)給調(diào)用者ContentValues)插入數(shù)據(jù)到內(nèi)容提供者Con
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2021-2026年中國(guó)葵花籽行業(yè)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略規(guī)劃研究報(bào)告
- 青島房地產(chǎn)項(xiàng)目投資可行性初步分析報(bào)告
- 四川省樂(lè)山市高中2025屆高二化學(xué)第二學(xué)期期末預(yù)測(cè)試題含解析
- 中國(guó)公廁溝槽式?jīng)_便器行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告(2024-2030)
- 2025年中國(guó)光模塊行業(yè)競(jìng)爭(zhēng)格局分析及投資規(guī)劃研究報(bào)告
- 國(guó)家生產(chǎn)安全監(jiān)督管理總局
- 安全生產(chǎn)事故案例分析及經(jīng)驗(yàn)反饋
- 公交車(chē)安全操作規(guī)程
- 誰(shuí)是本地區(qū)安全生產(chǎn)第一責(zé)任人
- 光伏發(fā)電EPC項(xiàng)目建設(shè)方案及可行性分析報(bào)告
- GB/T 45698-2025物業(yè)服務(wù)客戶滿意度測(cè)評(píng)
- 統(tǒng)編版語(yǔ)文二下園地三+單元復(fù)習(xí)課 課件
- 2025年輕人情緒消費(fèi)趨勢(shì)報(bào)告-抖音商城xsocialbeta-202506
- 培訓(xùn)中心項(xiàng)目管理制度
- 承包企業(yè)食堂管理制度
- 智能合約的自適應(yīng)優(yōu)化與動(dòng)態(tài)執(zhí)行研究-洞察闡釋
- 高中教科研課題:《新課程背景下高中語(yǔ)文情境教學(xué)改革研究》課題工作匯報(bào)
- 2025年寧波市奉化區(qū)紅果文體產(chǎn)業(yè)運(yùn)營(yíng)管理有限公司招聘筆試參考題庫(kù)含答案解析
- 湖南省永州市寧遠(yuǎn)縣2025屆七年級(jí)數(shù)學(xué)第二學(xué)期期末達(dá)標(biāo)檢測(cè)試題含解析
- 創(chuàng)新人才小升初試題及答案
- 委托加工稻米協(xié)議書(shū)
評(píng)論
0/150
提交評(píng)論