简介
由前面几篇我们学习了EventBus的使用、特性等等,这篇我们主要讲解的是我们如何在EventBus中如何自定义配置相关事项。还有设置事件的优先级案例分析。
进入代码
事例说明
在EventBus的官方文档中也提到了EventBusBuilder类配置EventBus的各个方面事项。例如:以下是如何构建一个在发布的事件没有订阅者的情况下保持静态的EventBus:
EventBus eventBus = EventBus.builder()
.logNoSubscriberMessages(false)
.sendNoSubscriberEvent(false)
.build();
另一个例子是当订阅者抛出异常时失败:
EventBus eventBus = EventBus.builder().throwSubscriberException(true).build();
配置默认的EventBus实例
使用EventBus.getDefault()是从应用程序中的任何位置获取共享EventBus实例的简单方法。EventBusBuilder还允许使用installDefaultEventBus ()方法配置此默认实例 。
例如,可以配置默认的EventBus实例以重新抛出订阅者方法中发生的异常。但是,仅限于DEBUG构建,因为这可能会使应用程序在例外情况下崩溃:
EventBus.builder().throwSubscriberException(BuildConfig.DEBUG).installDefaultEventBus();
如何使用
优先级
优先级priority使用
接下来我们来学习EventBus的优先级priority
表示。priority
来表示优先级,数值越大,优先级越高。在同一传递线程(ThreadMode)中,较高优先级的订户将在优先级较低的其他订户之前接收事件。默认优先级为0。
- 注:优先级不会影响具有不同ThreadModes的订阅者的传递顺序!
@Subscribe(priority = 1);
public void onEvent(MessageEvent event) {
//do something
}
取消事件传递
我们知道事件的优先级越高接收的数据最快,所以当优先级不想分发事件给低级别的事件时,可以使用cancelEventDelivery (Object event)
这里的参数是订阅的实体参数。如下代码。
- 注:当优先级更高的想取消事件传递时,只有当
threadMode = ThreadMode.POSTING
处于此状态才能取消事件传递有效。其他不行
@Subscribe(priority = 1000,threadMode =