说明 :
本文翻译自官网,如英文较好者可自行去官网查看,本文如有错误,往众大神多多指出!
英文能力差,理解能力差(本人翻译生硬),想快速入门,可看我另一篇博客一篇搞定EventBus。
事件总线:Android事件
EventBus是一个开源库的Android和java使用发布/订阅为 松耦合模式。EventBus使中央通信能够用几行代码解耦类——简化代码,消除依赖关系,加速应用程序开发。
你使用EventBus的好处:
- 简化组件之间的通信
- 解耦事件发送者和接收者
- 使用UI artifacts (例如activity、fragment)和后台线程
- 避免复杂易出错的依赖和生命周期问题
- 快速;专门优化高性能
- 很小 (<50k jar)
- 是 实践证明100000000 +安装的应用程序
- 具有传输线程、用户优先级等高级特性
进一步事件总线特性
- Convenient Annotation based API: 简单放置 @Subscribe annotation 到您的订阅方法. 由于注释的生成时间索引, EventBus不需要在应用程序运行时做注解反射。
- Android main thread delivery: 当与UI交互时,EventBus可以在主线程中传递事件,而不管发布的是什么事件。
- Background thread delivery: 如果您的订户执行长时间运行的任务,EventBus也可以使用后台线程来避免UI阻塞。
- Event & Subscriber inheritance: 在EventBus中,面向对象的范例适用于事件和订阅服务器类。假设事件类A是B的超类,B类型的张贴事件也将被发布给感兴趣的用户。同样地,考虑了用户类的继承。
- Jump start:您可以立即启动-而不需要使用默认EventBus实例配置任何代码,可以从代码中的任何地方使用。
- Configurable: 为了将EventBus调整为您的需求,可以使用Builder模式调整其行为。
将EventBus添加到您的项目中
EventBus可在JCenter和Maven Central上使用,因此只需将依赖项添加到项目中即可。
EventBus开始使用
使用EnvestBUS的第一步,请单击 documentation / tutorial
, 特别是getting started guide.
以上便是官方文档翻译而来
如何在3个步骤中启动EnvestBUS
EnviBus API与1-2-3一样容易。
在我们开始之前 确保将EnviBUS添加到项目中作为依赖项.
Step 1: 定义事件
事件是POJO (普通java对象)没有任何具体的要求。
public class MessageEvent {
public final String message;
public MessageEvent(String message) {
this.message = message;
}
}
第2步:准备subscribers
订阅服务器实现事件处理方法 (也称为 “subscriber methods”) 这将在事件发布时被调用。这些都是用 @Subscribe annotation.
注意,EnvestBUS 3可以自由选择方法名称(如EnvestBUS 2中没有命名约定)。
// 当发布消息事件时,将调用此方法(在ToST的UI线程中)
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}
// 当发布某个事件时,将调用此方法。
@Subscribe
public void handleSomethingElse(SomeOtherEvent event) {
doSomethingWith(event);
}
Subscribers 需要 注册 和注销 从事件总线上. 只有注册用户时,他们将收到事件.在Android中,在活动和片段中,你通常应该注册 根据它们的生命周期. 大多数情况下,启动/停止都可以正常工作。:
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
第三步:发布事件
从代码的任何部分发布事件。所有与事件类型匹配的当前注册用户将接收它。
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
Learn more
Have a look at the full documentation to learn about all features of EventBus.
网友评论