您好,登錄后才能下訂單哦!
EventBus 可以很方便地進行各組件間的通信,解耦性更強,比廣播更好用。
EventBus 3 簡介
EventBus是一種為了優化Android組件之間事件傳遞的解耦工具,通過發布/訂閱事件總線來實現事件在不同組件之間的事件傳遞。
在EventBus 3之前,greenrobot團隊因為考慮性能原因所以比較抵觸使用注解框架。目前的EventBus3開始使用注解來申明訂閱事件的處理方法。雖然目前Android 6 和ART都有了,但是對于Java反射造成的性能影響還是沒能很好的解決。
在EventBus3中,greenrobot團隊通過利用在編譯時檢索所有注解代碼,然后生成一個包含所有在運行時要花很大代價才能獲取的數據的類,通過這種新的注解處理方式來提升性能,讓EventBus3比其他的eventbus會更加快。在后文中會貼出和otto的性能比較。
EventBus 3 和 EventBus 2.x 的區別
回調方法改動
由于API的改動,會導致EventBus3和之前使用老版本的EventBus不兼容,因為之前版本(EventBus 2.x),在注冊完事件之后,會要求寫相應 onEvent()方法,包括onEvent()、onEventAsync()、onEventBackground()、onEventMainThread() 分別對應 @Subscrible 、@Subscrible(threadMode = ThreadMode.ASYNC)、@Subscribe(threadMode = ThreadMode.BACKGROUND)、@Subscribe(threadMode = ThreadMode.MAIN) 。EventBus 3中在未聲明threadMob時,默認的線程模式為ThreadMode.POSTING。
異常容錯處理
在EventBus3中,如果在@Subscrible標注的方法中,如果程序出錯,不會立即使程序crash,而是由EventBus攔截異常,并打印錯誤日志。
用戶可以通過EventBusBuilder來配置獲取EventBus實例后的對象,來決定在處理event時是否需要拋出異常信息:
eventBus = EventBus.builder().sendNoSubscriberEvent(false) .sendSubscriberExceptionEvent(false) .throwSubscriberException(BuildConfig.DEBUG) //只有在debug模式下,會拋出錯誤異常 .build();
以上代碼使用Builder設計模式,來構建返回一個eventBus實例。在調試階段,可以在程序出現異常時直接Crash發現錯誤。
快速使用
1. 編譯
compile 'org.greenrobot:eventbus:3.1.1'
2. 自定義事件類
public class MessageEvent { // 成員變量根據自己的需求創建 private int type; // 通過構造方法傳遞數據 public MessageEvent(int type) { this.type = type; } public int getType() { return type; } public void setType(int type) { this.type = type; } }
3. 注冊事件與解除注冊
一般來說,在 OnCreate() 方法中進行注冊:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout); EventBus.getDefault().register(this); }
與之對應的,在 OnDestroy() 中解除注冊:
@Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); }
4. 發送事件
EventBus.getDefault().post(new MessageEvent(type));
5. 接收與處理事件
/** * @Subscribe 注解必須要寫,線程需要指定 * 方法名可隨意 */ @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) { switch (event.getType()){ // do your thing } }
上面提到了線程模型,它一共有 5 種:
以上便是 EventBus 的最基本的使用,是不是很方便呢。希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。