StickyBroadcast

   今天做項目時遇到了一個問題是同一個項目中兩個不同的activity之間想要進行事件監聽,也就是A_activity裏面有了操作之後,另一個B_activity裏面要馬上做出改變。如果想要監聽,就必須得到那個activity的對象,但顯然這是沒法做到的。

   首先想到了四大組件中的廣播,通過發送廣播sendBroadcast()就可以讓兩個毫無關係的activity產生監聽聯繫。但是寫好代碼運行之後發現沒有達到預想中的效果,分析後就發現不是代碼寫錯了,而是發送普通的廣播根本無法達到效果。因爲,廣播是在B_activity的oncreate()方法中註冊的,也就是說只有進入了B界面的時候廣播才能被註冊,而這時候A界面的廣播明顯已經發送完成。sendBroadcast()也叫及時廣播,也就是只有在發送廣播時已經註冊了的廣播接受者才能收到廣播。

   這時候想起聽過但是沒用過的sendStickyBroadcast()(不知道是否可以翻譯爲粘性廣播?)。這個廣播的特性就在於它會一直保留,不管是在發送前註冊的還是發送後註冊的接收者都可以收到廣播。用法則和sendBroadcast()一樣。試驗過後發現果然可行。

   接着,又一個問題來了,運行發現每進入到B_activity都能收到該廣播,但我只需要收到一次就可。於是在想,根據這種廣播的特性,應該有提供消除廣播的方法吧。在網上搜索之後發現果然有可以消除的方法,也就是:removeStickyBroadcast(intent),通過括號中的參數intent的action來區分要消除的是哪個廣播。

   這樣,在oncreate()或onStart()方法中註冊廣播接收者,在onStop()方法中取消註冊廣播接收者並移除之前發送的粘性廣播即可達到想要的效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章