EventBus3官方文档翻译(二)
来源:互联网 发布:mac 快捷键设置没有用 编辑:程序博客网 时间:2024/06/03 22:04
EventBus3官方文档翻译(二)
Configuration(配置)
EventBusBuilder类可以配置多样的EventBus,例如,配置一个静静的eventbus:post事件,没有订阅者;
EventBus eventBus = EventBus.builder() .logNoSubscriberMessages(false) .sendNoSubscriberEvent(false) .build();
另一个例子,当一个订阅者抛出一个异常,eventbus将会fail;
EventBus eventBus = EventBus.builder().throwSubscriberException(true).build();
提示:默认地,EventBus捕获从订阅者抛出的异常,并且发送SubscriberExceptionEvent,但不是必须处理的;
- Configure the default EventBus instance(配置默认的EventBus实例)
使用EventBus.getDefault()是一个简单获取EventBus实例的方式,也允许使用方法installDefaultEventBus()配置默认的实例;
例如,配置默认的EventBus实例,让它重新抛出发生在订阅者方法中的异常,但只是在DEBUG模式中使用,因为它会让app crash;
EventBus.builder().throwSubscriberException(BuildConfig.DEBUG).installDefaultEventBus();
提示:在默认的EventBus使用之前只可以配置一次,以后再配置会抛出异常,这个保证app具有一致的行为,你的application类是不错的地方用来配置默认的EventBus实例;
Sticky Events(粘性事件)
一些携带信息的事件,在它们post之后,等段时间会被使用到,例如:一个标志初始化完成的事件,或者你想要保存传感器或定位最新的数据;取代你自己实现事件捕获,你可以使用sticky events,EventBus把上一次sticky events类型保存在内存中,那样sticky events可以传送给订阅者或明确地访问,你不需要逻辑考虑已经可用的数据;
Sticky Example
一个sticky events是在一段时间前post出:
EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));
现在一个新的activity start,在注册的时候,所有粘性订阅者会立即收到之前post的粘性事件;
@Overridepublic void onStart() { super.onStart(); EventBus.getDefault().register(this);}// UI updates must run on MainThread@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)public void onEvent(MessageEvent event) { textField.setText(event.message);}@Overridepublic void onStop() { EventBus.getDefault().unregister(this); super.onStop();}
Getting and Removing sticky Events manually(手动的获得和删除粘性事件)
正如你所看到,当订阅者注册,上一个粘性事件会自动地传送过去,但是,有时候,手动检查粘性事件也是很方便的,有必要的情况可以手动消耗粘性事件不让它们被传送
MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class);// Better check that an event was actually posted beforeif(stickyEvent != null) { // "Consume(消耗)" the sticky(粘的) event EventBus.getDefault().removeStickyEvent(stickyEvent); // Now do something with it}
方法removeStickyEvent可以多用的,当你传递进去class,它会返回之前保留的粘性事件,使用这个方法,我们可以改进前面的例子:
MessageEvent stickyEvent = EventBus.getDefault().removeStickyEvent(MessageEvent.class);// Better check that an event was actually posted beforeif(stickyEvent != null) { // Now do something with it}
Priorities and Event Cancellation(优先级与事件取消)
大多数例子中EventBus不会用到优先级和事件取消,只有少数情况下才会使用到,例如:一个事件在app在前台的时候可以改变UI逻辑,但是如果当前app不可见,则不同的响应;
- Subscriber Priorities(订阅者优先级)
在注册时,通过给订阅者提供一个priority(优先级),你可以改变事件传递的顺序
@Subscribe(priority = 1);public void onEvent(MessageEvent event) { ...}
在相同的事件传递线程中(thread mode),高优先级的订阅者比低优先级的订阅者先收到事件,默认的优先级为0;
提示:在不同thread mode中,优先级不会影响订阅者之间的传递顺序;
Cancelling event delivery(取消事件分发)
你可以在订阅者的事件处理方法中,通过回调cancelEventDelivery(Object event)来取消事件继续分发,任何更深层的分发将会被取消,因此后面订阅者不会接收到事件;
// Called in the same thread (default)@Subscribepublic void onEvent(MessageEvent event){ // Process the event ... // Prevent delivery to other subscribers EventBus.getDefault().cancelEventDelivery(event) ;}
事件通常被高优先级的订阅者取消.取消事件传递只能在posting线程中,不可以在其他threadmode中取消( Cancelling is restricted to event handling methods running in posting thread ( ThreadMode.PostThread)).
Eventbus 3官方文档翻译(一)
EventBus3官方文档翻译(三)
如有不妥的地方,欢迎留言指出。。。
- EventBus3官方文档翻译(二)
- EventBus3官方文档翻译(三)
- Flume官方文档翻译之(二)
- spark官方指南文档翻译(二)
- log4j2.x官方文档翻译(二)
- TiDB 官方设计文档翻译(二)
- ECMAScript 2015官方文档翻译(二)
- OkHttp wiki官方文档翻译(二)
- Mongo官方文档翻译 (二)
- Android Geofence的学习(二)继续翻译官方文档
- Python3.2官方文档翻译-标准库概览(二)
- Kafka官方文档翻译(二)快速入门
- RabbitMQ官方文档翻译之Work Queues(二)
- 【Android官方文档】翻译Android官方文档-Services(二)
- apple官方文档翻译:使用NSURLSession(二)
- Umbraco 官方技术文档 翻译 二、Date
- 二、Calcite官方文档翻译--进阶
- fmdb官方文档(翻译)
- 2016年5月-软件创新大赛项目
- Python--help方法
- 02-线性结构1 两个有序链表序列的合并【链表】
- Android打造自己的网络框架----Rxlifecycle的使用
- LeetCode 91. Decode Ways
- EventBus3官方文档翻译(二)
- 合并单向有序列表
- JavaMail
- 简单谈谈实现递归暴力枚举
- javascript中间凸显滚动圆圈特效demo
- C语言最大公约数三种算法
- Idea Windows下光标返回上一个位置的设置
- 将要远行
- 滤镜效果的ImageView