EventBus进阶(二)
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); }
混淆代码的时候千万别忘记了加上
相关推荐
kururunga 2020-05-07
kururunga 2020-04-23
kururunga 2019-12-08
huangf 2015-04-17
kururunga 2015-05-17
Androidtalent 2019-09-08
kuangren 2019-04-23
kuangren 2017-05-09
kuangren 2019-06-30
游戏人日常 2019-06-28
dubuwucool 2019-06-27
kururunga 2019-06-26
游戏人日常 2019-06-25
kururunga 2020-05-01
kururunga 2020-11-16
pengruiyu 2020-08-01
kururunga 2020-07-16
一个来自吉尔尼斯 2020-04-21
一个来自吉尔尼斯 2020-04-10