您好,登錄后才能下訂單哦!
今天做項目時遇到了一個問題是同一個項目中兩個不同的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()方法中取消注冊廣播接收者并移除之前發送的粘性廣播即可達到想要的效果。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。