EventBus 3.0使用方法

EventBus出自greenrobot,是为android端优化的publish/subscribe的事件总线,可以简化应用程序内组件之间、组件与后台线程之间的通信;同时代码也更简洁。eg:可用来在Fragment和Activity之间通信,网络请求后通信等

Paste_Image.png

EventBus 3.0版本最突出的特性是引入了注解,可通过注解指定事件响应函数,该函数的ThreadMode等。

基本使用方法:

1、在工程的build.gradle文件中加入编译依赖

compile 'org.greenrobot:eventbus:3.0.0'

2、自定义事件

public static class MessageEvent { /* Additional fields if needed */ }

3、添加订阅事件响应函数
不同于2.4版本,事件响应函数不必再以onEvent开头,而是以@Subscribe注解来标识。

@Subscribe(threadMode = ThreadMode.MAIN) 
public void onMessageEvent(MessageEvent event) {/* Do something */};

4、添加订阅者 register/unregister
安卓中Activity、Fragment通常根据生命周期函数来注册

@Override
public void onStart() { 
    super.onStart(); 
    EventBus.getDefault().register(this);
}

@Override
public void onStop() { 
    super.onStop(); 
    EventBus.getDefault().unregister(this);
}

5、发布事件

EventBus.getDefault().post(new MessageEvent());

高级编程技巧

1、可通过注解指定事件响应函数的优先级
类似有序广播的优先级,优先级高的事件响应函数优先获得事件

@Subscribe(threadMode = ThreadMode.MAIN,priority = 100) //在ui线程执行 优先级100 
public void onDataSynEvent(DataSynEvent event) { 
    Log.e(TAG, "event---->" + event.getCount()); 
}

2、高优先级的事件响应函数中,可终止事件的传递
注意,只能在Posting thread运行的事件响应函数可以调用该方法

EventBus.getDefault().cancelEventDelivery(event) ;

3、代码混淆的设置
保证Subscriber方法不被移除

-keepattributes *Annotation*
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
 
# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}

4、Sticky事件
类似广播中的sticky广播,其订阅/解除订阅和普通事件一样,但是处理订阅函数有所不同,需要注解中添加sticky = true

@Subscribe(threadMode = ThreadMode.MAIN,sticky = true) //在ui线程执行 
public void onDataSynEvent(DataSynEvent event) { 
    Log.e(TAG, "event---->" + event.getCount()); 
}

发送sticky事件

EventBus.getDefault().postSticky(new DataSynEvent());

对于sticky广播我们都比较清楚属于常驻广播,对于EventBus sticky事件也类似,我们如果不再需要该sticky事件我们可以移除

EventBus.getDefault().removeStickyEvent(new DataSynEvent());

或者调用移除所有sticky事件

EventBus.getDefault().removeAllStickyEvents();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对于Android开发老司机来说肯定不会陌生,它是一个基于观察者模式的事件发布/订阅框架,开发者可以通过极少的代码...
    飞扬小米阅读 5,317评论 0 50
  • 我每周会写一篇源代码分析的文章,以后也可能会有其他主题.如果你喜欢我写的文章的话,欢迎关注我的新浪微博@达达达达s...
    SkyKai阅读 25,084评论 23 184
  • title: android 初识EventBusdate: 2016-04-17tags: eventbus E...
    梵依然阅读 9,841评论 7 107
  • 作者:Markus JungingerGithub:greenrobot/EventBus原文:老司机教你 “飙”...
    敲代码的本愿阅读 9,216评论 3 11
  • 简我所爱阅读 676评论 0 0