Android中EventBus(事件總線)傳遞數據

  最近總結了Android內部傳遞數據的方法,這是其中的一種,別的方式,請看我的博客(Android中消息傳遞,看這一篇足夠了)。建議大家一起看,對比着學習,內容比較多,但是學Android這些都是必須會的。

   該博客分爲幾個步驟:1、簡介EventBus   2、下載EventBus的地址  3、使用步驟,配置環境

                                       4、粘性事件           5、代碼(建議直接看代碼 https://github.com/KEYD111/DCEventBus

    1、首先,EventBus是一個Android端優化的public/subscribe消息總線,簡化了應用程序內各組件間,組件與後臺線程間的通信,比如請求網絡,等網絡返回時通過handler或Broadcast通知UI,兩個Fragment之間需要通過Listener通信,這些需求都可以通過EventBus實現。  禁止 兩個 Fragment 之間直接通信,定義接口函數回調也不行(試過了)

    2、去Github下載EventBus的包:https://github.com/greenrobot/EventBus

     3、使用步驟   1、添加Jar包到llibs文件夾下 或者是 implementation 'org.greenrobot:eventbus:3.1.1'

                             2、註冊 EventBus.getDefault().resister(this);  防止消息泄露

                             3、解註冊  EventBus.getDefault().unregiste(this);

                             4、構造發送消息類

                              5、發佈消息    EventBus.getDefault().post(new MessageEvent("ssss",dfasfdasf"));

                              6、接受消息
                                          ThreadMode.MAIN  表示這個方法在主線程中執行
                                          ThreadMode.BACKGROUND  表示該方法在後臺執行,不能併發處理
                                          ThreadMode.ASYNC 表示後臺處理,異步併發處理
                                          ThreadMode.POSTING 表示該方法和消息發送方在同一個線程中執行

    4、之前說的方法,都是需要先註冊register,再post,才能接受到事件,如果使用postSticky發送事件,不需要先註冊,也能                        接受到事件
                            1、構造發送消息類
                            2、發佈消息  EventBus.getDefault().postSticky(new StickyEvent("我是粘性事件"))
                            3、接受消息
                            4、註冊  EventBus.getDefault.register(Activity.this)
                            5、解註冊

    5、比較 3 4 的方法的差異,3就相當於 B向A訂閱事件,A有事件了,B就接受了

                                                 4 是A發送事件了到緩衝區,B想要了,直接去緩衝區拿,不需要先註冊,當存在多個Fragment的時候,FragB 向 FragA要數據,可是FragB還沒有啓動,沒辦法註冊,此時就得使用粘性事件

    6、總結

      使用EventBus的第三方的庫,就是發送數據,Activity向Activity中發送數據,fragment 與fragment之間傳遞數據,不需要向以前那樣bundle  intent   解決fragment與fragment之間無法直接通信的問題,Activity與Activity通信之間不會出現問題,有點類似於廣播的機制,普通事件和粘性事件的區別:普通事件先註冊,粘性事件先接受再註冊,個人覺得粘性事件是萬能的,因爲先放在緩存中,解決了普通事件中,傳遞數據給Activity/Fragment時,還沒有初始化的問題,粘性事件,先將訂閱的內容存放在內存中,要用時,註冊一下,再取出來使用,但是代價就是內存佔用過大,如果需要接受的Activity/Fragment還沒有初始化,則先接受,在註冊,使用粘性事件,但是如果需要接受的已經初始化了,粘性事件可以完成,但是會消耗內存,建議還是正常的去使用。

    不足之處,請提出您寶貴的意見,侵權之處,請快聯繫作者。謝謝

   

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