BroadcastReceiver和EventBus區別

BroadcastReceiver是什麼鬼?在Android中廣播分爲兩個方面:廣播發送者和廣播接收者,通常情況下,BroadcastReceiver指的就是廣播接收者(廣播接收器)。

  EventBus又是什麼鬼呢?EventBus是一個發佈 / 訂閱的事件總線。簡單點說,就是兩人約定好怎麼通信,一人發佈消息,另外一個約定好的人立馬接收到你發的消息。EventBus就可以幫減少很多事,不管你在任何地方任何位置發佈一個事件,接收者都能立馬接收到你的消息,不用你考慮android子線程操作UI線程的問題。

 

  一、廣播作爲Android組件間的通信方式,可以使用以下場景:

  1、同一app內部的同一組件內的消息通信(單個或多個線程之間);

  2、同一app內部的不同組件之間的消息通信(單個進程);

  3、同一app具有多個進程的不同組件之間的消息通信;

  4、不同app之間的組件之間消息通信;

  5、Android系統在特定情況下與App之間的消息通信。

 

  二、以上的場景,在實際應用中的適用性:

  1、同一app內部的同一組件內的消息通信(單個或多個線程之間),實際應用中肯定是不會用到廣播機制的(雖然可以用),無論是使用擴展變量作用域、基於接口的回調還是Handler-post/Handler-Message等方式,都可以直接處理此類問題,若適用廣播機制,顯然有些“殺雞牛刀”的感覺;

  2、同一app內部的不同組件之間的消息通信(單個進程),對於此類需求,在有些教複雜的情況下單純的依靠基於接口的回調等方式不好處理,此時可以直接使用EventBus等,相對而言,EventBus由於是針對統一進程,用於處理此類需求非常適合,且輕鬆。

  3、其他情形,由於涉及不同進程間的消息通信,此時根據實際業務使用廣播機制會顯得非常適宜。

 

三、BroadcastReceiver的具體實現流程如下:

1、廣播接收者BroadcastReceiver通過Binder機制向AMS(Activity Manager Service)進行註冊;

  2、廣播發送者通過binder機制向AMS發送廣播;

  3、AMS查找符合相應條件(IntentFilter/Permission等)的BroadcastReceiver,將廣播發送到BroadcastReceiver(一般情況下是Activity)相應的消息循環隊列中;

  4、消息循環執行拿到此廣播,回調BroadcastReceiver中的onReceive()方法。

 

  四、使用EventBus框架具體流程如下:

  1、初始化時註冊EventBus.getDefault().register(this);

  2、用完之後註銷EventBus.getDefault().unregister(this);

  3、中間過程主要就是消息推送和接收,通過EventBus.getDefault().post(param)推送,通過onEventMainThread(param),onEventPostThread(param),onEventBackgroundThread(param),onEventAsync(param)接收並處理。

 

由此看來,廣播發送者和廣播接收者分別屬於觀察者模式中的消息發佈和訂閱兩端,AMS屬於中間的處理中心。廣播發送者和廣播接收者的執行是異步的,發出去的廣播不會關心有無接收者接收,也不確定接收者到底是何時才能接收到。顯然,整體流程與EventBus非常類似。

以上就是BroadcastReceiver和EventBus區別介紹,希望對你有幫助。

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