Android廣播:全局大喇叭是如何使用的!

【威哥說】Android界面間傳輸數(shù)據(jù)方式有很多嫉入,除了傳統(tǒng)的接口回調(diào)焰盗、構(gòu)造等方式,Google系統(tǒng)給我們內(nèi)置了一種叫做廣播的機(jī)制咒林,如同名字熬拒,也就是全局的發(fā)送,使用intent可以攜帶各種數(shù)據(jù)垫竞。那么它的原理是什么澎粟?那些細(xì)節(jié)需要我們注意?下面件甥,我們一起來(lái)看Android 廣播的使用捌议。

【正文】

BroadcastReceiver,是一個(gè)廣播接收者引有,因?yàn)閍ndroid組件之間消息的傳遞基于intent瓣颅,所以廣播接收者想要接收什么類型的廣播,將receiver標(biāo)簽下的intent-filter標(biāo)簽下的action標(biāo)簽的值置為那個(gè)廣播類型即可譬正。

除了清單文件中以外宫补,也可以直接在代碼中訂閱:

IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");

Receiver receiver = new Receiver();

registerReceiver(receiver, filter);

Receiver是你自己寫的繼承自BroadcastReceiver的類。IntentFilter就對(duì)應(yīng)著Action曾我,這里看到filter和上面清單文件中的一樣粉怕。

還有一個(gè)細(xì)節(jié)是sendBroadcast的三種發(fā)送方法。

sendBroadcast(),

sendOrderedBroadcast()

sendStickyBroadcast()

sendBroadcast()這個(gè)方法的廣播是能夠發(fā)送給所有廣播接收者抒巢,按照注冊(cè)的先后順序贫贝,如果你這個(gè)時(shí)候設(shè)置了廣播接收者的優(yōu)先級(jí),優(yōu)先級(jí)如果恰好與注冊(cè)順序相同,則不會(huì)有任何問題稚晚,如果順序不一樣崇堵,會(huì)出leaked IntentReceiver 這樣的異常,并且在前面的廣播接收者不能調(diào)用abortBroadcast()方法將其終止客燕,如果調(diào)用會(huì)出BroadcastReceiver trying to return result during a non-ordered broadcast的異常鸳劳,當(dāng)然,先接收到廣播的receiver可以修改廣播數(shù)據(jù)也搓。

sendOrderedBroadcast()方法顧名思義就是priority的屬性能起作用赏廓,并且在隊(duì)列前面的receiver可以隨時(shí)終止廣播的發(fā)送。還有這個(gè)api能指定final的receiver傍妒,這個(gè)receiver是最后一個(gè)接收廣播時(shí)間的receiver幔摸,并且一定會(huì)接收到廣播事件,是不能被前面的receiver攔截的拍顷。實(shí)際做實(shí)驗(yàn)的情況是這樣的抚太,假設(shè)我有3個(gè)receiver依序排列,并且sendOrderedBroadcast()方法指定了一個(gè)finalReceiver昔案,那么intent傳遞給這4個(gè)Receiver的順序?yàn)镽eceiver1-->finalReceiver-->Receiver2-->finalReceiver-->Receiver3-->finalReceiver尿贫。這個(gè)特性可以用來(lái)統(tǒng)計(jì)系統(tǒng)中能監(jiān)聽某種廣播的Receiver的數(shù)目。

sendStickyBroadcast()字面意思是發(fā)送粘性的廣播踏揣,使用這個(gè)api需要權(quán)限android.Manifest.permission.BROADCAST_STICKY,粘性廣播的特點(diǎn)是Intent會(huì)一直保留到廣播事件結(jié)束庆亡,而這種廣播也沒有所謂的10秒限制,10秒限制是指普通的廣播如果onReceive方法執(zhí)行時(shí)間太長(zhǎng)捞稿,超過10秒的時(shí)候系統(tǒng)會(huì)將這個(gè)廣播置為可以干掉的candidate又谋,一旦系統(tǒng)資源不夠的時(shí)候,就會(huì)干掉這個(gè)廣播而讓它不執(zhí)行娱局。

下面是廣播接收者的生命周期以及一些細(xì)節(jié)部分:

1.廣播接收者的生命周期是非常短暫的彰亥,在接收到廣播的時(shí)候創(chuàng)建,onReceive()方法結(jié)束之后銷毀衰齐;

2.廣播接收者中不要做一些耗時(shí)的工作任斋,否則會(huì)彈出Application No Response錯(cuò)誤對(duì)話框;

3.最好也不要在廣播接收者中創(chuàng)建子線程做耗時(shí)的工作耻涛,因?yàn)閺V播接收者被銷毀后進(jìn)程就成為了空進(jìn)程废酷,很容易被系統(tǒng)殺掉;

4.耗時(shí)的較長(zhǎng)的工作最好放在服務(wù)中完成抹缕。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末澈蟆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子卓研,更是在濱河造成了極大的恐慌趴俘,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異哮幢,居然都是意外死亡带膀,警方通過查閱死者的電腦和手機(jī)志珍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門橙垢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人伦糯,你說我怎么就攤上這事柜某。” “怎么了敛纲?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵喂击,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我淤翔,道長(zhǎng)翰绊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任旁壮,我火速辦了婚禮监嗜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抡谐。我一直安慰自己裁奇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布麦撵。 她就那樣靜靜地躺著刽肠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪免胃。 梳的紋絲不亂的頭發(fā)上音五,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音羔沙,去河邊找鬼躺涝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛撬碟,可吹牛的內(nèi)容都是我干的诞挨。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼呢蛤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼惶傻!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起其障,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤银室,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜈敢,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辜荠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抓狭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伯病。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖否过,靈堂內(nèi)的尸體忽然破棺而出午笛,到底是詐尸還是另有隱情,我是刑警寧澤苗桂,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布药磺,位于F島的核電站,受9級(jí)特大地震影響煤伟,放射性物質(zhì)發(fā)生泄漏癌佩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一便锨、第九天 我趴在偏房一處隱蔽的房頂上張望围辙。 院中可真熱鬧,春花似錦鸿秆、人聲如沸酌畜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)桥胞。三九已至,卻和暖如春考婴,著一層夾襖步出監(jiān)牢的瞬間贩虾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工沥阱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缎罢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓考杉,卻偏偏與公主長(zhǎng)得像策精,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子崇棠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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