在作項目的時候每每須要應用程序內各組件間、組件與後臺線程間的通訊。好比耗時操做,等耗時操做完成後經過Handler或Broadcast將結果通知給UI,N個Activity之間須要經過Listener通訊,其實這些均可以經過EventBus輕鬆實現,EventBus經過發佈/訂閱(publish/subscribe)方式來管理事件總。EventBus經過註解和反射機制 將訂閱者連同訂閱函數保存起來,而後在發送訂閱的時候 遍歷訂閱函數數組進行調用,其實從這方面就能夠EventBus執行效率多少會受到一點影響。git
github地址:https://github.com/greenrobot/EventBusgithub
官網給出的各類角色的協做圖數組
EventBus框架也是採用建造者模式設計的,能夠經過EventBusBuilder來設置一些配置信息,例如設置debug模式下要拋出異常框架
以前作圖片類項 的時候,須要處理一個點贊數據的同步,好比在做品的詳情頁點贊 須要同時更新列表頁該做品的點贊數量,這裏仍是以此爲例。 函數
1.)build.gradle添加引用 post
compile 'org.greenrobot:eventbus:3.0.0'
2.)定義一個事件類型gradle
public class DataSynEvent { private int count; public int getCount() { return count; } public void setCount(int count) { this.count = count; } }
3.)訂閱/解除訂閱ui
訂閱this
EventBus.getDefault().register(this);//訂閱
解除訂閱spa
EventBus.getDefault().unregister(this);//解除訂閱
4.)發佈事件
EventBus.getDefault().post(new DataSynEvent());
5.)訂閱事件處理
@Subscribe(threadMode = ThreadMode.MAIN) //在ui線程執行 public void onDataSynEvent(DataSynEvent event) { Log.e(TAG, "event---->" + event.getCount()); }