四大組件之三 -- BroadcastReceiver

一招盲、BroadcastReceiver是什么愿题。

Android應(yīng)用程序可以發(fā)送或接收來自Android系統(tǒng)和其他Android應(yīng)用程序的廣播消息免胃,類似于發(fā)布訂閱設(shè)計(jì)模式粉楚。例如辣恋,當(dāng)各種系統(tǒng)事件發(fā)生時(shí),例如系統(tǒng)啟動(dòng)或設(shè)備開始充電時(shí)模软,Android系統(tǒng)會(huì)發(fā)送廣播伟骨。應(yīng)用程序還可以發(fā)送自定義廣播,例如燃异,通知其他應(yīng)用程序可能感興趣的內(nèi)容(例如携狭,一些新數(shù)據(jù)已被下載)。

應(yīng)用程序可以注冊(cè)以接收特定的廣播回俐。當(dāng)發(fā)送廣播時(shí)暑中,系統(tǒng)自動(dòng)將廣播路由到已訂閱接收該特定類型的廣播的應(yīng)用。

一般來說鲫剿,廣播可以用作跨應(yīng)用程序和正常用戶流之外的消息傳遞系統(tǒng)鳄逾。

系統(tǒng)廣播

當(dāng)系統(tǒng)發(fā)生各種系統(tǒng)事件時(shí),系統(tǒng)會(huì)自動(dòng)發(fā)送廣播灵莲,例如系統(tǒng)切換飛機(jī)模式時(shí)雕凹。系統(tǒng)廣播將發(fā)送到訂閱接收事件的所有應(yīng)用程序。

廣播消息本身被包裹在Intent其動(dòng)作字符串識(shí)別發(fā)生的事件的對(duì)象(例如android.intent.action.AIRPLANE_MODE)中。該意圖還可以包括捆綁到其額外字段中的附加信息枚抵。例如线欲,飛機(jī)模式意圖包括一個(gè)布爾值,表示飛機(jī)模式是否打開汽摹。

二李丰、接收廣播

應(yīng)用程序可以通過兩種方式接收廣播:通過清單聲明注冊(cè)和上下文注冊(cè)。

清單聲明注冊(cè)

1逼泣、指定應(yīng)用程式清單中的<reveiver>元素趴泌。

2、子類BroadcastReceiver和實(shí)現(xiàn)onReceiver(Context context,Intent intent)拉庶。以下示例中的廣播接收器記錄并顯示廣播的內(nèi)容:

上下文注冊(cè)

1嗜憔、創(chuàng)建一個(gè)實(shí)例BroadcastReceiver。

BroadcastReceiverbr=newMyBroadcastReceiver();

2氏仗、創(chuàng)建Intentfilter并通過調(diào)用注冊(cè)接收方RegisterReceiver(BroadcastReceiver 吉捶, IntentFilter);

IntentFilterfilter=newIntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
intentFilter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
this.registerReceiver(br,filter);

3皆尔、要停止接收廣播呐舔,請(qǐng)注銷unregisterReceiver(android.content.BroadcastReceiver)。當(dāng)您不再需要它或上下文不再有效時(shí)慷蠕,請(qǐng)務(wù)必注銷接收器滋早。

注意在哪里注冊(cè)和注銷接收者,例如砌们,如果您在onCreate(Bundle)使用活動(dòng)的上下文中注冊(cè)接收方杆麸,則應(yīng)該取消注冊(cè),onDestory()以防止將接收者從活動(dòng)上下文泄漏出來浪感。如果您在其中注冊(cè)了一個(gè)接收器onResume()昔头,您應(yīng)該取消注冊(cè),onPause()以防止多次注冊(cè)(如果您不想在暫停時(shí)接收廣播影兽,并且可以減少不必要的系統(tǒng)開銷)揭斧。不要注銷onSaveInstanceState(Bundle),因?yàn)槿绻脩粼跉v史堆棧中移回峻堰,則不會(huì)調(diào)用它讹开。

三、發(fā)送廣播

1捐名、sendOrderedBroadcast(Intent旦万,String)方法一次向一個(gè)接收器發(fā)送廣播。隨著每個(gè)接收機(jī)依次執(zhí)行镶蹋,它可以將結(jié)果傳播到下一個(gè)接收機(jī)成艘,或者它可以完全中止廣播赏半,使得它不會(huì)被傳遞到其他接收機(jī)。運(yùn)行的訂單接收器可以通過匹配的意圖過濾器的android:priority屬性來控制;具有相同優(yōu)先級(jí)的接收器將以任意順序運(yùn)行淆两。

2断箫、sendBroadcast(Intent)方法以未定義的順序向所有接收者發(fā)送廣播。這被稱為普通廣播秋冰。這更有效率仲义,但是意味著接收機(jī)不能從其他接收機(jī)讀取結(jié)果,傳播從廣播接收到的數(shù)據(jù)剑勾,或者中止廣播埃撵。

3、LocalBroadcastManger.sendBroadcast()方法向與發(fā)送方相同的應(yīng)用程序的接收方發(fā)送廣播甥材。如果您不需要跨應(yīng)用發(fā)送廣播,請(qǐng)使用本地廣播性含。實(shí)施效率更高(無需進(jìn)行進(jìn)程間通信)洲赵,您無需擔(dān)心與能夠接收或發(fā)送廣播的其他應(yīng)用程序相關(guān)的任何安全問題。

四商蕴、接收權(quán)限

如果您在注冊(cè)廣播接收者時(shí)指定了權(quán)限參數(shù)(與清單registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)中的標(biāo)簽一起使用)叠萍,則只有通過其清單中的標(biāo)簽請(qǐng)求許可的廣播商才能發(fā)送接收器的意圖。

例如绪商,假設(shè)您的接收應(yīng)用程序具有清單聲明的接收器苛谷,如下所示:

或者您的接收應(yīng)用程序具有上下文注冊(cè)的接收器,如下所示:

安全考慮和最佳做法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末格郁,一起剝皮案震驚了整個(gè)濱河市腹殿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌例书,老刑警劉巖锣尉,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異决采,居然都是意外死亡自沧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門树瞭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拇厢,“玉大人,你說我怎么就攤上這事晒喷⌒①耍” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵凉敲,是天一觀的道長邪媳。 經(jīng)常有香客問我捐顷,道長,這世上最難降的妖魔是什么雨效? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任迅涮,我火速辦了婚禮,結(jié)果婚禮上徽龟,老公的妹妹穿的比我還像新娘叮姑。我一直安慰自己,他們只是感情好据悔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布传透。 她就那樣靜靜地躺著,像睡著了一般极颓。 火紅的嫁衣襯著肌膚如雪朱盐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天菠隆,我揣著相機(jī)與錄音兵琳,去河邊找鬼。 笑死骇径,一個(gè)胖子當(dāng)著我的面吹牛躯肌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播破衔,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼清女,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了晰筛?” 一聲冷哼從身側(cè)響起嫡丙,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎读第,沒想到半個(gè)月后迄沫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卦方,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年羊瘩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盼砍。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尘吗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浇坐,到底是詐尸還是另有隱情睬捶,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布近刘,位于F島的核電站擒贸,受9級(jí)特大地震影響臀晃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜介劫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一徽惋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧座韵,春花似錦险绘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至黔帕,卻和暖如春代咸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背成黄。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工呐芥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慨默。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓贩耐,卻偏偏與公主長得像弧腥,于是被迫代替她去往敵國和親厦取。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容