2018-05-10—廣播接收者初次使用

大家好,我們之前一直在進(jìn)行各種控件的學(xué)習(xí)明未,像Recyclerview,Listview壹蔓,Spinner等等趟妥,這些都是我們能看到的東西。

我們說(shuō)android有四大組件庶溶,而這四種組件中煮纵,只有Activity是可視,能直接跟用戶有交互的偏螺,除了這個(gè)之外還有三種,他們是我們不可見(jiàn)得匆光,但是在程序中起著很重要的作用套像,今天我們來(lái)看一下四大組件之一的廣播接收者BroadcastReceiver。


我們大家都聽(tīng)過(guò)廣播吧终息,在學(xué)校的時(shí)候大喇叭發(fā)一條廣播:“廣播通知夺巩,廣播通知,高一四班的李一鳴同學(xué)周崭,你媽媽拿了旺仔牛奶在學(xué)校門(mén)口等柳譬。。续镇。美澳。。≈聘”舅桩,然后,學(xué)校所有的喇叭都想起來(lái)了這條廣播雨膨。我們不管這個(gè)同學(xué)尷不尷尬擂涛,我們只需要在意這個(gè)廣播的機(jī)制。

我們可以這樣理解:

學(xué)校廣播機(jī)制

這張圖表達(dá)的意思應(yīng)該很明確了:一個(gè)地方發(fā)送一條廣播聊记,然后所有的喇叭都接收到了撒妈,并執(zhí)行了一個(gè)操作:把這段話播放出來(lái)。

如果我們把它抽象出來(lái)排监,就是這樣子的:

BroadcastReceiver機(jī)制

這個(gè)就是我們Android的廣播機(jī)制狰右。

在寫(xiě)代碼之前,我們要先介紹一下這個(gè)BroadcastReceiver社露,

首先它分為兩種廣播:標(biāo)準(zhǔn)廣播有序廣播挟阻。

標(biāo)準(zhǔn)廣播就是完全的異步廣播:我們都知道異步是什么意思,標(biāo)準(zhǔn)廣播在發(fā)出后峭弟,幾乎所有的BroadcastReceiver都可以在同一時(shí)刻接收到廣播附鸽。

有序廣播就正好相反了:他是一個(gè)同步的廣播,在同一時(shí)刻只能有一個(gè)BroadcastReceiver接收到廣播瞒瘸。

接下來(lái)我們來(lái)一下如何創(chuàng)建BroadcastReceiver坷备。


創(chuàng)建BroadcastReceiver

創(chuàng)建BroadcastReceiver有兩種方式:靜態(tài)實(shí)現(xiàn)和動(dòng)態(tài)實(shí)現(xiàn)(這個(gè)跟之前學(xué)的東西有點(diǎn)像吧)。靜態(tài)實(shí)現(xiàn)是通過(guò)XML注冊(cè)的情臭,而動(dòng)態(tài)實(shí)現(xiàn)是完全java代碼實(shí)現(xiàn)省撑。這兩種實(shí)現(xiàn)有什么區(qū)別呢?我們先來(lái)試驗(yàn)一下俯在。

1.通過(guò)靜態(tài)注冊(cè)BroadcastReceiver

1.首先我們需要一個(gè)類去繼承BroadcastReceiver

類MyReceiver

我們注意到他需要重寫(xiě)一個(gè)onReceive方法竟秫,當(dāng)我們的廣播接收者接收到對(duì)應(yīng)的廣播之后,就會(huì)跳轉(zhuǎn)到onReceive方法中跷乐,執(zhí)行對(duì)應(yīng)的方法肥败。

2.manifest注冊(cè)

xml注冊(cè)

我們action中添加了name屬性,值為zy.pers.MY_APPLICAITON愕提,這個(gè)其實(shí)是自己寫(xiě)的馒稍,你要是開(kāi)心想寫(xiě)asd都可以。

3.使用

我們添加一個(gè)button浅侨,用來(lái)發(fā)送廣播

發(fā)送廣播

現(xiàn)在我們來(lái)看一看效果:


好了纽谒,有人會(huì)問(wèn)我們剛才在manifest中添加的action 的name屬性沒(méi)用到啊如输?你想用的話現(xiàn)在就可以用了鼓黔。

我把剛才的intent構(gòu)造方法內(nèi)參數(shù)改為了剛才的actionname央勒,沒(méi)錯(cuò),這個(gè)方法就是隱式調(diào)用了我們的Receiver请祖。我們的Intent可以根據(jù)我們的actionname订歪,進(jìn)行各種跳轉(zhuǎn),如Activity肆捕,Service刷晋,BroadcastReceiver。這里我們給MyReceiver的actionname設(shè)置為這個(gè)值慎陵,所以他會(huì)發(fā)送一條廣播眼虱。然后效果同上的,就不展示了席纽。

這是我們BroadcastReceiver的靜態(tài)注冊(cè)用法捏悬。接下來(lái)我們看一下動(dòng)態(tài)注冊(cè):


2.通過(guò)動(dòng)態(tài)注冊(cè)BroadcastReceiver

我們還是用剛才的那個(gè)MyReceiver類,現(xiàn)在我們?cè)诖a中new一個(gè)對(duì)象润梯。

這個(gè)IntentFilter類是不是看著很熟悉呢过牙?我們?cè)赬Ml中剛才就有這個(gè)標(biāo)簽,然后我們執(zhí)行addAction方法纺铭,給他添加action寇钉。這個(gè)過(guò)程等同于我們剛才在xml中添加action標(biāo)簽的name屬性。

最后一步注冊(cè)監(jiān)聽(tīng)器舶赔,你可以理解為把這個(gè)IntentFilter給這個(gè)receiver扫倡。

然后點(diǎn)擊事件不變,同樣是發(fā)送廣播竟纳。

對(duì)了撵溃,別忘了把剛才xml中注冊(cè)的代碼刪除了。

我們來(lái)看一下效果:

對(duì)了锥累,動(dòng)態(tài)注冊(cè)在onDestroy方法一定要記得解除注冊(cè)

效果相同缘挑,同樣可以實(shí)現(xiàn)廣播。


靜態(tài)注冊(cè)和動(dòng)態(tài)注冊(cè)的區(qū)別

首先桶略,我們有兩種注冊(cè)方式卖哎,那他們肯定是有區(qū)別的,本人不廢話了删性,直接上表格:

其實(shí)說(shuō)白了就是三點(diǎn):

1.靜態(tài)可以顯示啟動(dòng),也可以隱試啟動(dòng)焕窝;而動(dòng)態(tài)只能隱試啟動(dòng)

2.靜態(tài)可以不寫(xiě)action蹬挺,直接通過(guò)類名.class進(jìn)行調(diào)用;動(dòng)態(tài)必須寫(xiě)action它掂。

3.當(dāng)BroadcastReceiver為內(nèi)部類的時(shí)候巴帮,如果是靜態(tài)注冊(cè)溯泣,那一定要寫(xiě)成靜態(tài)內(nèi)部類(這個(gè)原因這里就不說(shuō)了,大家去看一下java內(nèi)部類的知識(shí)就可以理解一二了)榕茧。

4.其實(shí)還有第四點(diǎn)-垃沦。+:我們BroadcastReceiver不但可以在當(dāng)前app發(fā)送廣播,也可以在不同App發(fā)送廣播(喚醒就是這個(gè)原理)用押。但是大家想一下肢簿,如果我們app1的Activity已經(jīng)退出,執(zhí)行了onDestroy方法蜻拨,那么他肯定就沒(méi)辦法在接收廣播了池充,因?yàn)榇藭r(shí)連接收者對(duì)象都沒(méi)有;

而靜態(tài)注冊(cè)就不同了缎讼,他的接收者是一直存在的收夸,所以這也是靜態(tài)注冊(cè)的一個(gè)優(yōu)勢(shì)吧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末血崭,一起剝皮案震驚了整個(gè)濱河市卧惜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夹纫,老刑警劉巖咽瓷,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異捷凄,居然都是意外死亡忱详,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)跺涤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)匈睁,“玉大人,你說(shuō)我怎么就攤上這事桶错『剿簦” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵院刁,是天一觀的道長(zhǎng)糯钙。 經(jīng)常有香客問(wèn)我,道長(zhǎng)退腥,這世上最難降的妖魔是什么任岸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮狡刘,結(jié)果婚禮上享潜,老公的妹妹穿的比我還像新娘。我一直安慰自己嗅蔬,他們只是感情好剑按,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布疾就。 她就那樣靜靜地躺著,像睡著了一般艺蝴。 火紅的嫁衣襯著肌膚如雪猬腰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天猜敢,我揣著相機(jī)與錄音姑荷,去河邊找鬼。 笑死锣枝,一個(gè)胖子當(dāng)著我的面吹牛厢拭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撇叁,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼供鸠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了陨闹?” 一聲冷哼從身側(cè)響起楞捂,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎趋厉,沒(méi)想到半個(gè)月后寨闹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡君账,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年繁堡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乡数。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡椭蹄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出净赴,到底是詐尸還是另有隱情绳矩,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布玖翅,位于F島的核電站翼馆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏金度。R本人自食惡果不足惜应媚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猜极。 院中可真熱鬧珍特,春花似錦、人聲如沸魔吐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)酬姆。三九已至嗜桌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辞色,已是汗流浹背骨宠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留相满,地道東北人层亿。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像立美,于是被迫代替她去往敵國(guó)和親匿又。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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

  • 【Android 廣播】 BroadcastReceiver簡(jiǎn)介 BroadcastReceiver(廣播接收器)...
    Rtia閱讀 3,386評(píng)論 1 17
  • 現(xiàn)實(shí)中的廣播:電臺(tái)為了傳達(dá)一些消息而發(fā)送廣播建蹄,通過(guò)廣播攜帶要傳達(dá)的消息碌更,群眾只要買一個(gè)收音機(jī),就可以收到廣播了洞慎。 ...
    stevewang閱讀 4,232評(píng)論 0 8
  • 謹(jǐn)以文章記錄學(xué)習(xí)歷程痛单,如有錯(cuò)誤還請(qǐng)指明。 前言 我們上學(xué)時(shí)都有過(guò)這樣的經(jīng)歷劲腿,當(dāng)我們?cè)诨疖囌玖熊嚭蜍囀抑械却龝r(shí)旭绒,每當(dāng)...
    whd_Alive閱讀 7,619評(píng)論 2 13
  • 1.Android廣播機(jī)制概述 Android廣播分為兩個(gè)方面:廣播發(fā)送者和廣播接收者,通常情況下焦人,Broadca...
    IT小魔女的故事閱讀 549評(píng)論 0 2
  • 之前寫(xiě)過(guò)《2016讀書(shū)小結(jié)》挥吵,這篇繼續(xù)盤(pán)點(diǎn)一下2016年看過(guò)的電影。 根據(jù)豆瓣的記錄垃瞧,2016年我一共看了216部...
    我就是沉沉閱讀 464評(píng)論 0 0