简介:EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。
优势:
- 简单而强大:
EventBus是一个非常容易学习的
API的小型库。尽管如此,您的软件架构可能会通过解耦组件获得巨大的收益:使用事件时,订阅者对发件人不了解。
- 战斗测试:
EventBus是最常用的
Android库之一:数千个应用程序使用
EventBus,包括非常受欢迎的应用程序。超过10亿的应用程序安装自己说。
- 高性能:特别是在
Android上,性能很重要。
EventBus被分析和优化了很多; 可能使其成为同类最快的解决方案。
基于方便的基于注释的
API (不牺牲性能):简单地将@
Subscribe注释添加到您的用户方法中。由于注释的构建时间索引,
EventBus不需要在应用程序运行时进行注释反射,这在
Android上非常慢。
- Android主线程交付:当与UI进行交互时,EventBus可以在主线程中传递事件,而不管事件如何发布。
- 后台线程传递:如果您的用户长时间运行任务,EventBus还可以使用后台线程来避免UI阻塞。
- 事件和订阅者继承:在EventBus中,面向对象的范例适用于事件和订阅者类。假设事件类A是B的超类。类型B的发布的事件也将被发布给对A感兴趣的用户。类似地,考虑订户类的继承。
- 零配置:您可以立即开始使用代码中任何地方提供的默认EventBus实例。
- 可配置:要根据需要调整EventBus,可以使用构建器模式调整其行为。
1.build.gradle添加引用
compile 'org.greenrobot:eventbus:3.0.0'
2.构建消息类
public class MessageEven {
private String message;
public MessageEven(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
3.使用前的注册和使用后的注销
EventBus.getDefault().register(this);//注册
EventBus.getDefault().unregister(this);//注销
4.发送消息
EventBus.getDefault().post(new MessageEven("Content"));
5.根据实际情况选择四种线程方法处理收到后的消息逻辑
/**
* 主线程中执行
* @param msg
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMainEventBus(MessageEven even) {
//消息处理
Log.e("===Main", Thread.currentThread().getName());
}
/**
* 后台线程
* @param msg
*/
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onBackgroundEventBus(MessageEven even) {
Log.e("===OnBack", Thread.currentThread().getName());
}
/**
* 异步线程
*
* @param msg
*/
@Subscribe(threadMode = ThreadMode.ASYNC)
public void onAsyncEventBus(MessageEven even) {
Log.e("===onAsy", Thread.currentThread().getName());
}
/**
* 默认情况,和发送事件在同一个线程
*
* @param msg
*/
@Subscribe(threadMode = ThreadMode.POSTING,priority = 100)
public void onPostEventBus(MessageEven even) {
Log.e("===onPost", Thread.currentThread().getName());
EventBus.getDefault().cancelEventDelivery(even);
}