EventBus进阶(二)
上一篇简单介绍了EventBus的简单用法,下面来介绍下EventBus的其它的一些用法
1 事件订阅的优先级的使用
EventBus.getDefault().register(this, priority);
在同一个线程级别中,订阅者的优先级越高,就越先收到消息,默认优先级是0
2 使用EventBusBuilder配置EnventBus
EventBus2.3新增使用EventBusBuilder 去配置各种不同的EventBus,例如去创建一个没有订阅者的EventBus
EventBus eventBus = EventBus.builder().logNoSubscriberMessages(false).sendNoSubscriberEvent(false).build();
当订阅者发生异常的时候,我们可以创建一个捕捉订阅者异常的EventBus(EventBus默认是会捕捉订阅者发生的异常的)
EventBus.builder().throwSubscriberException(BuildConfig.DEBUG).installDefaultEventBus();
3 取消事件传递
// Called in the same thread (default) public void onEvent(MessageEvent event){ // Process the event ... EventBus.getDefault().cancelEventDelivery(event) ; }
4 使用StickeyEvent实现android组件之间进行通讯
当事件post之后,我们可能要获得这些事件携带的一些数据,这个有时可以作为事件初始化完成的信号。或者你可以获取一些最新的信息,例如传感器和位置信息,这些数据每时每刻都在更新,可能我们最关心的却是最新的。你不必使用缓存,仅仅用sticky events就完全可以实现。EventBus会在内存中存储最后一个特定类型的sticky event。stikey event 可以准确的传递给所有的事件订阅者 ,因此,你不用需要处理任何特殊的逻辑去考虑哪些已经可用的数据。
看了eventBus的官方文档之后,其实我还是云里雾里的,这stikeyEvent能干嘛呢?按照个人的理解它是一个可以被缓存的事件,而用一般的事件,你会发现当Activity跳转的时候,事件所携带的信息是不能带过去的,也就是说一般的Event是不会被缓存的。前面介绍eventBus的时候,它是可以替代android 组件之间通讯的,那是不是可以使用stikeyEvent可以实现呢?答案是肯定的。
下面介绍如何使用StikeyEvent实现ActivityA和Activity B之间进行通讯
- ActivityA跳转到ActivityB的时候,post事件
EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));
- 当Activity B启动的时候,注册stickyEvent
@Override public void onStart() { super.onStart(); EventBus.getDefault().registerSticky(this); }
- 在Activity B中新建一个接收StickyEvent事件的方法
public void onEventMainThread(MessageEvent event) { textField.setText(event.message); }
- 反注册StickyEvent
@Override public void onStop() { EventBus.getDefault().unregister(this); super.onStop(); }
补充:1 你可以调用removeStickyEvent 方法移除之前post的StikeyEvent
2 可以得到最后一个特定类型的StickyEvent
EventBus.getDefault().getStickyEvent(Class<?> eventType)
5 ProGuard 配置
-keepclassmembers class ** { public void onEvent*(**); } # Only required if you use AsyncExecutor -keepclassmembers class * extends de.greenrobot.event.util.ThrowableFailureEvent { <init>(java.lang.Throwable); }
混淆代码的时候千万别忘记了加上
相关推荐
博客《EventBus使用详解(二)——EventBus使用进阶》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/40787203
1.还在为Android各大组件之间通信设计通信繁琐的通信模式吗,还在为后台加载与前端更新而烦恼吗,eventbus总线事件控制,简单易懂!方便控制,赶快进阶吧!
博客《EventBus使用详解(一)——EventBus使用进阶》对应源码,博客地址:http://blog.csdn.net/wangyi891223/article/details/49885999
EventBus的入门与进阶
eventBus 3.0 带有注释的源码
EventBus 3.1.1版本。 EventBus is a publish/subscribe event bus for Android and Java. simplifies the communication between components decouples event senders and receivers performs well with ...
这个是EventBus3.0 的jar包,如果还使用elipse可以用这个,导入到lib包下即可
eventbus-3.1.1.jar eventbus-3.1.1.jar eventbus-3.1.1.jar
eventbus demo
android EventBus
参考文档:电梯直达 EventBusUtils //订阅者回调签名 typedef void EventCallback(arg);... static EventBus _singleton = new EventBus._internal(); /// 工厂构造函数 factory EventBus() => _singleton; /// 保
EventBus详解事件发送方式
[DEPRECATED] 使用EventBus-Apt优化实现,不过用法类似 项目地址:https://github.com/LuckyJayce/EventBus-Apt EventBus 事件总线 简介 事件总线的思路源于 https://github.com/greenrobot/EventBus 不过代码和实现...
eventbus-3.1.1.jar eventbus-3 官方下载,如果需要欢迎下载
安卓 EventBus 使用示例,开发工具为eclipse+ADT,EventBus可简化安卓各个组件,线程之间的通信 相关博客 http://blog.csdn.net/qq_34763699/article/details/79467327
EventBus3.1.1 2017年12月发布最新版。EventBus是一个专门为Android优化的“发布/订阅”模式的事件总线,是一个开源jar包。 官方介绍如下: EventBus... simplifies the communication between components ...
EventBus源码及demo,demo中测试了EventBus的四个接收消息函数的线程使用情况。
主要是通信组件EventBus,EventBus是一款针对Android优化的发布/订阅事件总线。 博客地址:http://blog.csdn.net/dickyqie/article/details/55101035
android eventbus-3.2.0.jar 解压就可以使用
EventBus定义:是一个发布 / 订阅的事件总线 以及EventBus的4种ThreadMode