chapter06第6章 廣播機(jī)制_第1頁
chapter06第6章 廣播機(jī)制_第2頁
chapter06第6章 廣播機(jī)制_第3頁
chapter06第6章 廣播機(jī)制_第4頁
chapter06第6章 廣播機(jī)制_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第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è)教室都會裝有一個(gè)喇叭,這些喇叭是接入到學(xué)校廣播室的。如果有重要通知,會發(fā)送一條廣播來告知全校師生。為了便于發(fā)送和接收系統(tǒng)級別的消息通知,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ā)布者要求,在已注冊列表中,尋找合適的消息訂閱者,尋找依據(jù)是(IntentFilter/Permission)3、發(fā)送廣播1、注冊廣播接收者(Binder機(jī)制)

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

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

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

創(chuàng)建完廣播接收者之后還需要對廣播接收者進(jìn)行注冊才可以接收廣播。6.2.2廣播接收者的創(chuàng)建選擇【New】→【Other】→【BroadcastReceiver】選項(xiàng)來創(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í)例化過濾器并設(shè)置要過濾的廣播Stringaction="vider.Telephony.SMS_RECEIVED";IntentFilterintentFilter=newIntentFilter();intentFilter.addAction(action);registerReceiver(receiver,intentFilter);//注冊廣播動(dòng)態(tài)注冊動(dòng)態(tài)注冊廣播,動(dòng)態(tài)注冊的廣播接收者是否被注銷依賴于注冊廣播的組件,當(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)注冊注冊廣播當(dāng)Activity銷毀時(shí),取消注冊實(shí)例化過濾器并設(shè)置要過濾的廣播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)注冊靜態(tài)注冊廣播,在小于Android8.0的設(shè)備上,只要設(shè)備處于開啟狀態(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í)需要編寫對應(yīng)的廣播接收者。公共消息區(qū)自定義廣播廣播接收者發(fā)送消息監(jiān)聽消息當(dāng)自定義廣播發(fā)送消息時(shí),會儲存到公共消息區(qū)中,而公共消息區(qū)中如果存在對應(yīng)的廣播接收者,就會及時(shí)的接收這條信息。6.3.1自定義廣播廣播的類型Android系統(tǒng)提供了兩種廣播類型,有序廣播和無序廣播,開發(fā)者可根據(jù)需求為程序設(shè)置不同的廣播類型。無序廣播無序廣播是完全異步執(zhí)行,發(fā)送廣播時(shí)所有監(jiān)聽這個(gè)廣播的廣播接收者都會接收到此消息,但接收的順序不確定。按照接收者的優(yōu)先級接收,只有一個(gè)廣播接收者能接收消息,在此廣播接收者中邏輯執(zhí)行完畢后,才會繼續(xù)傳遞。有序廣播6.3.2廣播的類型發(fā)送廣播廣播接收者1廣播接收者2廣播接收者3優(yōu)先級最高優(yōu)先級較高優(yōu)先級最低發(fā)送廣播廣播接收者1廣播接收者2廣播接收者36.3.2廣播的類型優(yōu)先級//動(dòng)態(tài)注冊MyReceiver廣播

MyReceiver

one=newMyReceiver();In

溫馨提示

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

評論

0/150

提交評論