溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

StickyBroadcast

發(fā)布時(shí)間:2020-06-30 14:18:23 來(lái)源:網(wǎng)絡(luò) 閱讀:535 作者:xiaoyusong 欄目:開(kāi)發(fā)技術(shù)

   今天做項(xiàng)目時(shí)遇到了一個(gè)問(wèn)題是同一個(gè)項(xiàng)目中兩個(gè)不同的activity之間想要進(jìn)行事件監(jiān)聽(tīng),也就是A_activity里面有了操作之后,另一個(gè)B_activity里面要馬上做出改變。如果想要監(jiān)聽(tīng),就必須得到那個(gè)activity的對(duì)象,但顯然這是沒(méi)法做到的。

   首先想到了四大組件中的廣播,通過(guò)發(fā)送廣播sendBroadcast()就可以讓兩個(gè)毫無(wú)關(guān)系的activity產(chǎn)生監(jiān)聽(tīng)聯(lián)系。但是寫(xiě)好代碼運(yùn)行之后發(fā)現(xiàn)沒(méi)有達(dá)到預(yù)想中的效果,分析后就發(fā)現(xiàn)不是代碼寫(xiě)錯(cuò)了,而是發(fā)送普通的廣播根本無(wú)法達(dá)到效果。因?yàn)?,廣播是在B_activity的oncreate()方法中注冊(cè)的,也就是說(shuō)只有進(jìn)入了B界面的時(shí)候廣播才能被注冊(cè),而這時(shí)候A界面的廣播明顯已經(jīng)發(fā)送完成。sendBroadcast()也叫及時(shí)廣播,也就是只有在發(fā)送廣播時(shí)已經(jīng)注冊(cè)了的廣播接受者才能收到廣播。

   這時(shí)候想起聽(tīng)過(guò)但是沒(méi)用過(guò)的sendStickyBroadcast()(不知道是否可以翻譯為粘性廣播?)。這個(gè)廣播的特性就在于它會(huì)一直保留,不管是在發(fā)送前注冊(cè)的還是發(fā)送后注冊(cè)的接收者都可以收到廣播。用法則和sendBroadcast()一樣。試驗(yàn)過(guò)后發(fā)現(xiàn)果然可行。

   接著,又一個(gè)問(wèn)題來(lái)了,運(yùn)行發(fā)現(xiàn)每進(jìn)入到B_activity都能收到該廣播,但我只需要收到一次就可。于是在想,根據(jù)這種廣播的特性,應(yīng)該有提供消除廣播的方法吧。在網(wǎng)上搜索之后發(fā)現(xiàn)果然有可以消除的方法,也就是:removeStickyBroadcast(intent),通過(guò)括號(hào)中的參數(shù)intent的action來(lái)區(qū)分要消除的是哪個(gè)廣播。

   這樣,在oncreate()或onStart()方法中注冊(cè)廣播接收者,在onStop()方法中取消注冊(cè)廣播接收者并移除之前發(fā)送的粘性廣播即可達(dá)到想要的效果。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI