chapter06第6章 廣播機(jī)制_第1頁(yè)
chapter06第6章 廣播機(jī)制_第2頁(yè)
chapter06第6章 廣播機(jī)制_第3頁(yè)
chapter06第6章 廣播機(jī)制_第4頁(yè)
chapter06第6章 廣播機(jī)制_第5頁(yè)
已閱讀5頁(yè),還剩15頁(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)介

第6章廣播機(jī)制6

6.1廣播機(jī)制的概述6.2廣播接收者6.3自定義廣播與廣播的類型3廣播接收者重點(diǎn)了解掌握2自定義廣播廣播的類型攔截有序廣播1學(xué)習(xí)目標(biāo)6.1廣播機(jī)制的概述主講內(nèi)容Speechcontent主講內(nèi)容第6章廣播機(jī)制6.1廣播機(jī)制的概述通常情況下在學(xué)校的每個(gè)教室都會(huì)裝有一個(gè)喇叭,這些喇叭是接入到學(xué)校廣播室的。如果有重要通知,會(huì)發(fā)送一條廣播來(lái)告知全校師生。為了便于發(fā)送和接收系統(tǒng)級(jí)別的消息通知,Android系統(tǒng)也引入了一套類似廣播的消息機(jī)制。Android中的廣播(Broadcast)機(jī)制用于進(jìn)程/線程間通信,該機(jī)制使用了觀察者模式,觀察者模式是一種軟件設(shè)計(jì)模式,該模式是基于消息的發(fā)布/訂閱事件模型,該模型中的消息發(fā)布者是廣播機(jī)制中的廣播發(fā)送者,消息訂閱者是廣播機(jī)制中的廣播接收者,廣播機(jī)制的具體實(shí)現(xiàn)流程,如下圖所示。6.1廣播機(jī)制的概述

消息發(fā)送者(廣播發(fā)送者)2、發(fā)送廣播(Binder機(jī)制)處理中心(AMS)根據(jù)消息發(fā)布者要求,在已注冊(cè)列表中,尋找合適的消息訂閱者,尋找依據(jù)是(IntentFilter/Permission)3、發(fā)送廣播1、注冊(cè)廣播接收者(Binder機(jī)制)

消息訂閱者(廣播接收者)上述圖中的廣播機(jī)制的實(shí)現(xiàn)流程具體如下:1、廣播接收者是通過(guò)Binder機(jī)制在AMS(ActivityManagerService)中進(jìn)行注冊(cè)的

(在6.2小節(jié)會(huì)講解廣播接收者的注冊(cè))。2、廣播發(fā)送者是通過(guò)Binder機(jī)制向AMS發(fā)送廣播。3、AMS查找符合相應(yīng)條件(IntentFilter/Permission)的廣播接收者

(BroadcastReceiver),將廣播發(fā)送到相應(yīng)的消息循環(huán)隊(duì)列中。4、執(zhí)行消息循環(huán)時(shí)獲取到此廣播,會(huì)回調(diào)廣播接收者(BroadcastReceiver)中的onReceive()方法并在該方法中進(jìn)行相關(guān)處理。應(yīng)用場(chǎng)景同一app內(nèi)部的同一組件內(nèi)的消息通信(單個(gè)或多個(gè)線程之間);同一app內(nèi)部的不同組件之間的消息通信(單個(gè)進(jìn)程);同一app具有多個(gè)進(jìn)程的不同組件之間的消息通信;不同app之間的組件之間消息通信;Android系統(tǒng)在特定情況下與App之間的消息通信。6.1廣播機(jī)制的概述6.2廣播接收者主講內(nèi)容Speechcontent主講內(nèi)容6.2.1什么是廣播接收者6.2.2廣播接收者的創(chuàng)建第6章廣播機(jī)制實(shí)際生活中,電臺(tái)用于發(fā)送廣播,收音機(jī)用于接收廣播。發(fā)送廣播消息廣播接收者廣播特點(diǎn)Android系統(tǒng)中內(nèi)置了很多廣播,例如手機(jī)開(kāi)機(jī)完成、電池電量不足時(shí)都會(huì)發(fā)送一條廣播。為了監(jiān)聽(tīng)來(lái)自系統(tǒng)或者應(yīng)用程序的廣播事件,Android系統(tǒng)提供了BroadcastReceiver(廣播接收者)組件。當(dāng)Android系統(tǒng)產(chǎn)生一個(gè)廣播事件時(shí),可以有多個(gè)對(duì)應(yīng)的廣播接收者接收并進(jìn)行處理。BroadcastReceiver2Android系統(tǒng)或其他程序產(chǎn)生的廣播事件BroadcastReceiver1BroadcastReceiver36.2.1什么是廣播接收者6.2.2廣播接收者的創(chuàng)建廣播接收者的創(chuàng)建方式有兩種,具體如下:一種是通過(guò)在應(yīng)用程序的包中創(chuàng)建一個(gè)類繼承BroadcastReceiver并重寫onReceive()方法來(lái)實(shí)現(xiàn)的。一種是通過(guò)選中應(yīng)用程序中的包,右擊選擇【New】→【Other】→【BroadcastReceiver】選項(xiàng)來(lái)創(chuàng)建的。注意:

創(chuàng)建完廣播接收者之后還需要對(duì)廣播接收者進(jìn)行注冊(cè)才可以接收廣播。6.2.2廣播接收者的創(chuàng)建選擇【New】→【Other】→【BroadcastReceiver】選項(xiàng)來(lái)創(chuàng)建廣播如下:廣播接收者名稱創(chuàng)建完成

publicclassMyReceiverextendsBroadcastReceiver{publicMyReceiver(){}@OverridepublicvoidonReceive(Contextcontext,Intentintent){thrownewUnsupportedOperationException("Notyetimplemented");}}創(chuàng)建廣播接收者在該方法中實(shí)現(xiàn)廣播接收者的相關(guān)操作6.2.2廣播接收者的創(chuàng)建receiver=newMyBroadcastReceiver();//實(shí)例化廣播接收者//實(shí)例化過(guò)濾器并設(shè)置要過(guò)濾的廣播Stringaction="vider.Telephony.SMS_RECEIVED";IntentFilterintentFilter=newIntentFilter();intentFilter.addAction(action);registerReceiver(receiver,intentFilter);//注冊(cè)廣播動(dòng)態(tài)注冊(cè)動(dòng)態(tài)注冊(cè)廣播,動(dòng)態(tài)注冊(cè)的廣播接收者是否被注銷依賴于注冊(cè)廣播的組件,當(dāng)組件銷毀時(shí),廣播接收者也隨之被注銷。6.2.2廣播接收者的創(chuàng)建protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);MyReceiverreceiver=newMyReceiver();Stringaction="vider.Telephony.SMS_RECEIVED";IntentFilterintentFilter=newIntentFilter();intentFilter.addAction(action);registerReceiver(receiver,intentfilter);}protectedvoidonDestroy(){super.onDestroy();unregisterReceiver(receiver);}動(dòng)態(tài)注冊(cè)注冊(cè)廣播當(dāng)Activity銷毀時(shí),取消注冊(cè)實(shí)例化過(guò)濾器并設(shè)置要過(guò)濾的廣播6.2.2廣播接收者的創(chuàng)建<?xmlversion="1.0"encoding="utf-8"?><manifest……….><application………><receiverandroid:name=".MyReceiver"android:enabled="true"android:exported="true"><intent-filter><actionandroid:name="ent.action.ACTION_POWER_CONNECTED"/></intent-filter></receiver></application></manifest>靜態(tài)注冊(cè)靜態(tài)注冊(cè)廣播,在小于Android8.0的設(shè)備上,只要設(shè)備處于開(kāi)啟狀態(tài),廣播接收者就能接收到廣播。6.2.2廣播接收者的創(chuàng)建6.3自定義廣播與廣播的類型主講內(nèi)容Speechcontent主講內(nèi)容6.3.1自定義廣播6.3.2廣播的類型第6章廣播機(jī)制自定義廣播當(dāng)系統(tǒng)提供的廣播不能滿足實(shí)際需求時(shí),可以自定義廣播,同時(shí)需要編寫對(duì)應(yīng)的廣播接收者。公共消息區(qū)自定義廣播廣播接收者發(fā)送消息監(jiān)聽(tīng)消息當(dāng)自定義廣播發(fā)送消息時(shí),會(huì)儲(chǔ)存到公共消息區(qū)中,而公共消息區(qū)中如果存在對(duì)應(yīng)的廣播接收者,就會(huì)及時(shí)的接收這條信息。6.3.1自定義廣播廣播的類型Android系統(tǒng)提供了兩種廣播類型,有序廣播和無(wú)序廣播,開(kāi)發(fā)者可根據(jù)需求為程序設(shè)置不同的廣播類型。無(wú)序廣播無(wú)序廣播是完全異步執(zhí)行,發(fā)送廣播時(shí)所有監(jiān)聽(tīng)這個(gè)廣播的廣播接收者都會(huì)接收到此消息,但接收的順序不確定。按照接收者的優(yōu)先級(jí)接收,只有一個(gè)廣播接收者能接收消息,在此廣播接收者中邏輯執(zhí)行完畢后,才會(huì)繼續(xù)傳遞。有序廣播6.3.2廣播的類型發(fā)送廣播廣播接收者1廣播接收者2廣播接收者3優(yōu)先級(jí)最高優(yōu)先級(jí)較高優(yōu)先級(jí)最低發(fā)送廣播廣播接收者1廣播接收者2廣播接收者36.3.2廣播的類型優(yōu)先級(jí)//動(dòng)態(tài)注冊(cè)MyReceiver廣播

MyReceiver

one=newMyReceiver();In

溫馨提示

  • 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)論