EventBus的简单使用
由greenrobot組織貢獻(該組織還貢獻了greenDAO),一個Android事件發布/訂閱輕量級框架,
功能:通過解耦發布者和訂閱者簡化Android事件傳遞
EventBus可以代替 Android傳統的Intent,Handler,Broadcast或接口函數,在Fragment,Activity,Service線程之間傳遞數據,執行方法。
特點:代碼簡潔,是一種發布訂閱設計模式(觀察者設計模式)。
EventBus源碼下載?
?EventBus的使用場景
用于線程間的通訊代替handler或用于組件間的通訊代替Intent
廣泛用于團購,商城,社交等應用,比如易大師APP,易宸鋒Application...
實踐證明已經有一億多的APP中集成了EventBus
?EventBus的優勢
簡化了組件間的通訊。
分離了事件的發送者和接受者。
在Activity、Fragment和線程中表現良好。
避免了復雜的和易錯的依賴關系和聲明周期問題。
使得代碼更簡潔,性能更好。
更快,更小(約50k的 jar包)
?
?EventBus原理圖
EventBus底層采用的是注解和反射的方式來獲取訂閱方法信息(首先是注解獲取,若注解獲取不到,再用反射)
當前訂閱者是添加到Eventbus 總的事件訂閱者的subscriptionByEventType集合中
訂閱者所有訂閱的事件類型添加到typeBySubscriber 中,方便解注冊時,移除事件
? ? ? ? ? ? ? ? ? ? ? ??
?EventBus使用
? ? ? ? 第一步:添加依賴 ? ??
compile 'org.greenrobot:eventbus:3.0.0'復制代碼? ? ? ? 第二步:定義消息事件類
public class MessageEvent{private String message;public MessageEvent(String message){this.message=message;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;} }復制代碼第三步:注冊和解除注冊? ? ? ? ? ? ?你的事件在哪接收,就在哪個類進行EventBus的注冊和解除操作
? ? ? ? ? ?
@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main_activity);EventBus.getDefault().register(this);復制代碼? ? @Override protected void onDestroy() { EventBus .getDefault().unregister(MainActivity.this); super.onDestroy(); }復制代碼
? ? ? ? ?
? ? ? ? ? ? EventBus.getDefault().post(new MessageEvent("我是九重透流"));
? ? ? ? ??
? ? ? ? ? 第五步:接收事件
? ? ? ?
@Subscribe(threadMode = ThreadMode.MAIN)public void Event(MessageEvent messageEvent) {Lod.d("eventbus",messageEvent.getMessage());} 復制代碼? ? ? ? 總結
? ? ? ? ? ? ? ? ? ? ?在進行組件、頁面間通信的時候,EventBus是一個不錯的選擇。?
總結
以上是生活随笔為你收集整理的EventBus的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Topcoder SRM 697题解
- 下一篇: G6 2.0 开源发布 -- 裂变·聚变