国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

安卓四大程序組件+Intent講解

2019-11-06 09:36:46
字體:
供稿:網(wǎng)友
Android 的核心功能之一就是一個(gè)應(yīng)用程序可以使用其它應(yīng)用程序的元素(如果那個(gè)應(yīng)用程序允許的話)。比如說,如果你的應(yīng)用程序需要一個(gè)圖片卷動(dòng)列表,而另一個(gè)應(yīng)用程序已經(jīng)開發(fā)了一個(gè)合用的而又允許別人使用的話,你可以直接調(diào)用那個(gè)卷動(dòng)列表來完成工作,而不用自己再開發(fā)一個(gè)。你的應(yīng)用程序并沒有吸納或鏈接其它應(yīng)用程序的代碼,它只是在有需求的時(shí)候啟動(dòng)了其它應(yīng)用程序的那個(gè)功能部分。為達(dá)到這個(gè)目的,系統(tǒng)必須在一個(gè)應(yīng)用程序的一部分被需要時(shí)啟動(dòng)這個(gè)應(yīng)用程序,并將那個(gè)部分的java對象實(shí)例化。與在其它系統(tǒng)上的應(yīng)用程序不同,Android應(yīng)用程序沒有為應(yīng)用準(zhǔn)備一個(gè)單獨(dú)的程序入口(比如說,沒有 main() 方法), 而是為系統(tǒng)依照需求實(shí)例化提供了基本的組件。共有四種組件類型:ActivityActivity 是為用戶操作而展示的可視化用戶界面。比如說,一個(gè) activity 可以展示一個(gè)菜單項(xiàng)列表供用戶選擇,或者顯示一些包含說明的照片。一個(gè)短消息應(yīng)用程序可以包括一個(gè)用于顯示做為發(fā)送對象的聯(lián)系人的列表的 activity,一個(gè)給選定的聯(lián)系人寫短信的 activity 以及翻閱以前的短信和改變設(shè)置的 activity。盡管它們一起組成了一個(gè)內(nèi)聚的用戶界面,但其中每個(gè) activity 都與其它的保持獨(dú)立。每個(gè)都是以 Activity類為基類的子類實(shí)現(xiàn)。一個(gè)應(yīng)用程序可以只有一個(gè) activity,或者,如剛才提到的短信應(yīng)用程序那樣,包含很多個(gè)。每個(gè) activity的作用,以及其數(shù)目,自然取決于應(yīng)用程序及其設(shè)計(jì)。一般情況下,總有一個(gè)應(yīng)用程序被標(biāo)記為用戶在應(yīng)用程序啟動(dòng)的時(shí)候第一個(gè)看到的。從一個(gè) activity 轉(zhuǎn)向另一個(gè)的方式是靠當(dāng)前的 activity 啟動(dòng)下一個(gè)。每個(gè) activity 都被給予一個(gè)默認(rèn)的窗口以進(jìn)行繪制。一般情況下,這個(gè)窗口是滿屏的,但它也可以是一個(gè)小的位于其它窗口之上的浮動(dòng)窗口。一個(gè) activity 也可以使用超過一個(gè)的窗口──比如,在 activity 運(yùn)行過程中彈出的一個(gè)供用戶反應(yīng)的小對話框,或是當(dāng)用戶選擇了屏幕上特定項(xiàng)目后顯示的必要信息。窗口顯示的可視內(nèi)容是由一系列視圖構(gòu)成的,這些視圖均繼承自 View 基類。每個(gè)視圖均控制著窗口中一塊特定的 矩形 空間。父級視圖包含并組織它子視圖的布局。葉節(jié)點(diǎn)視圖(位于視圖層次最底端)在它們控制的矩形中進(jìn)行繪制,并對用戶對其直接操作做出響應(yīng)。所以,視圖是 activity 與用戶進(jìn)行交互的界面。比如說,視圖可以顯示一個(gè)小圖片,并在用戶指點(diǎn)它的時(shí)候產(chǎn)生動(dòng)作。Android 有很多既定的視圖供用戶直接使用,包括按鈕、文本域、卷軸、菜單項(xiàng)、復(fù)選框等等。視圖層次是由 Activity.setContentView() 方法放入 activity 的窗口之中的。上下文視圖是位于視圖層次根位置的視圖對象。(參見用戶界面章節(jié)獲取關(guān)于視圖及層次的更多信息。)服務(wù)Service服務(wù)沒有可視化的用戶界面,而是在一段時(shí)間內(nèi)在后臺(tái)運(yùn)行。比如說,一個(gè)服務(wù)可以在用戶做其它事情的時(shí)候在后臺(tái)播放背景音樂、從網(wǎng)絡(luò)上獲取一些數(shù)據(jù)或者計(jì)算一些東西并提供給需要這個(gè)運(yùn)算結(jié)果的activity 使用。每個(gè)服務(wù)都繼承自 Service 基類。一個(gè)媒體播放器播放播放列表中的曲目是一個(gè)不錯(cuò)的例子。播放器應(yīng)用程序可能有一個(gè)或多個(gè)activity來給用戶選擇歌曲并進(jìn)行播放。然而,音樂播放這個(gè)任務(wù)本身不應(yīng)該為任何activity所處理,因?yàn)橛脩羝谕谒麄冸x開播放器應(yīng)用程序而開始做別的事情時(shí),音樂仍在繼續(xù)播放。為達(dá)到這個(gè)目的,媒體播放器activity應(yīng)該啟用一個(gè)運(yùn)行于后臺(tái)的服務(wù)。而系統(tǒng)將在這個(gè) activity 不再顯示于屏幕之后,仍維持音樂播放服務(wù)的運(yùn)行。你可以連接至(綁定)一個(gè)正在運(yùn)行的服務(wù)(如果服務(wù)沒有運(yùn)行,則啟動(dòng)之)。連接之后,你可以通過那個(gè)服務(wù)暴露出來的接口與服務(wù)進(jìn)行通訊。對于音樂服務(wù)來說,這個(gè)接口可以允許用戶暫停、回退、停止以及重新開始播放。如同 activity 和其它組件一樣,服務(wù)運(yùn)行于應(yīng)用程序進(jìn)程的主線程內(nèi)。所以它不會(huì)對其它組件或用戶界面有任何干擾,它們一般會(huì)派生一個(gè)新線程來進(jìn)行一些耗時(shí)任務(wù)(比如音樂回放)。廣播接收器BroadcastReceiver廣播接收器是一個(gè)專注于接收廣播通知信息,并做出對應(yīng)處理的組件。 很多廣播是源自于系統(tǒng)代碼的──比如,通知時(shí)區(qū)改變、電池電量低、拍攝了一張照片或者用戶改變了語言選項(xiàng)。應(yīng)用程序也可以進(jìn)行廣播──比如說,通知其它應(yīng)用程序一些數(shù)據(jù)下載完成并處于可用狀態(tài)。應(yīng)用程序可以擁有任意數(shù)量的廣播接收器以對所有它感興趣的通知信息予以響應(yīng)。所有的接收器均繼承自BroadcastReceiver 基類。廣播接收器沒有用戶界面。然而,它們可以啟動(dòng)一個(gè) activity 來響應(yīng)它們收到的信息,或者用NotificationManager 來通知用戶。通知可以用很多種方式來吸引用戶的注意力──閃動(dòng)背燈、震動(dòng)、播放聲音等等。一般來說是在狀態(tài)欄上放一個(gè)持久的圖標(biāo),用戶可以打開它并獲取消息。內(nèi)容提供者ContentPRovider內(nèi)容提供者 將一些特定的應(yīng)用程序數(shù)據(jù)供給其它應(yīng)用程序使用。數(shù)據(jù)可以存儲(chǔ)于文件系統(tǒng)、SQLite 數(shù)據(jù)庫或其它方式。內(nèi)容提供者繼承于 ContentProvider 基類,為其它應(yīng)用程序取用和存儲(chǔ)它管理的數(shù)據(jù)實(shí)現(xiàn)了一套標(biāo)準(zhǔn)方法。然而,應(yīng)用程序并不直接調(diào)用這些方法,而是使用一個(gè) ContentResolver 對象,調(diào)用它的方法作為替代。ContentResolver 可以與任意內(nèi)容提供者進(jìn)行會(huì)話,與其合作來對所有相關(guān)交互通訊進(jìn)行管理。每當(dāng)出現(xiàn)一個(gè)需要被特定組件處理的請求時(shí),Android 會(huì)確保那個(gè)組件的應(yīng)用程序進(jìn)程處于運(yùn)行狀態(tài),或在必要的時(shí)候啟動(dòng)它。并確保那個(gè)相應(yīng)組件的實(shí)例的存在,必要時(shí)會(huì)創(chuàng)建那個(gè)實(shí)例。激活組件:intent當(dāng)接收到 ContentResolver 發(fā)出的請求后,內(nèi)容提供者被激活。而其它三種組件 activity ── 、服務(wù)和廣播接收器被一種叫做intent 的異步消息所激活intent是一個(gè)保存著消息內(nèi)容的Intent對象。對于activity 和服務(wù)來說,它指明了請求的操作名稱以及作為操作對象的數(shù)據(jù)的 URI 和其它一些信息。比如說,它可以承載對一個(gè) activity 的請求,讓它為用戶顯示一張圖片,或者讓用戶編輯一些文本。而對于廣播接收器而言,Intent 對象指明了聲明的行為。比如,它可以對所有感興趣的對象聲明照相按鈕被按下。對于每種組件來說,激活的方法是不同的:?通過傳遞一個(gè)Intent對象至 Context.startActivity()或Activity.startActivityForResult()以載入(或指定新工作給)一個(gè)activity。相應(yīng)的activity可以通過調(diào)用 getIntent() 方法來查看激活它的intent。Android通過調(diào)用activity的onNewIntent()方法來傳遞給它繼發(fā)的intent一個(gè)activity經(jīng)常啟動(dòng)了下一個(gè)。如果它期望它所啟動(dòng)的那個(gè)activity返回一個(gè)結(jié)果,它會(huì)以調(diào)用startActivityForResult()來取代startActivity()。比如說,如果它啟動(dòng)了另外一個(gè)activity以使用戶挑選一張照片,它也許想知道哪張照片被選中了。結(jié)果將會(huì)被封裝在一個(gè)Intent對象中,并傳遞給發(fā)出調(diào)用的activity的 onActivityResult() 方法。?通過傳遞一個(gè)Intent對象至Context.startService()將啟動(dòng)一個(gè)服務(wù)(或給予正在運(yùn)行的服務(wù)以運(yùn)行的一個(gè)新的指令)。Android調(diào)用服務(wù)的 onStart()方法并將Intent對象傳遞給它。與此類似,一個(gè)Intent可以被調(diào)用組件傳遞給 Context.bindService()以獲取一個(gè)正在目標(biāo)服務(wù)的連接。這個(gè)服務(wù)會(huì)經(jīng)由onBind()方法的調(diào)用獲取這個(gè)Intent對象(如果服務(wù)尚未啟動(dòng),bindService()會(huì)先啟動(dòng)它)。比如說,一個(gè)activity可以連接至前述的音樂回放服務(wù),并提供給用戶一個(gè)可操作的(用戶界面)以對回放進(jìn)行控制。這個(gè)activity可以調(diào)用bindService() 來建立連接,然后調(diào)用服務(wù)中定義的對象來影響回放。?應(yīng)用程序可以憑借將 Intent 對象傳遞給Context.sendBroadcast(),Context.sendOrderedBroadcast(), 以及 Context.sendStickyBroa法來產(chǎn)生一個(gè)廣播。Android 會(huì)調(diào)用所有對此廣播有興趣的廣播接收器的 onReceive()方法,將 intent 傳遞給它們。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 洞口县| 宝山区| 玉田县| 平凉市| 防城港市| 商丘市| 绥化市| 天全县| 时尚| 固阳县| 鄱阳县| 凭祥市| 武邑县| 峡江县| 泰州市| 德令哈市| 石台县| 翼城县| 昌宁县| 伊通| 宜都市| 常山县| 红河县| 岱山县| 茌平县| 新源县| 桓仁| 常山县| 江西省| 达州市| 东乡族自治县| 林甸县| 宁远县| 霍城县| 扶风县| 左权县| 青铜峡市| 鄢陵县| 鸡泽县| 昆山市| 孟州市|