由greenrobot组织贡献(该组织还贡献了greenDAO),一个Android事件发布/订阅轻量级框架,
功能:通过解耦发布者和订阅者简化Android事件传递
EventBus可以代替 Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据,执行方法。
特点:代码简洁,是一种发布订阅设计模式(观察者设计模式)。
EventBus的使用场景
用于线程间的通讯代替handler或用于组件间的通讯代替Intent
广泛用于团购,商城,社交等应用,比如易大师APP,易宸锋Application...
实践证明已经有一亿多的APP中集成了EventBus
EventBus的优势
简化了组件间的通讯。
分离了事件的发送者和接受者。
在Activity、Fragment和线程中表现良好。
避免了复杂的和易错的依赖关系和声明周期问题。
使得代码更简洁,性能更好。
更快,更小(约50k的 jar包)
EventBus原理图
EventBus底层采用的是注解和反射的方式来获取订阅方法信息(首先是注解获取,若注解获取不到,再用反射)
当前订阅者是添加到Eventbus 总的事件订阅者的subscriptionByEventType集合中
订阅者所有订阅的事件类型添加到typeBySubscriber 中,方便解注册时,移除事件

EventBus使用
第一步:添加依赖
compile 'org.greenrobot:eventbus:3.0.0'第二步:定义消息事件类
public class MessageEvent{
private String message;
public MessageEvent(String message){
this.message=message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}你的事件在哪接收,就在哪个类进行EventBus的注册和解除操作
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
EventBus.getDefault().register(this); @Override
protected void onDestroy() {
EventBus .getDefault().unregister(MainActivity.this);
super.onDestroy(); }
EventBus.getDefault().post(new MessageEvent("我是九重透流"));
第五步:接收事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void Event(MessageEvent messageEvent) {
Lod.d("eventbus",messageEvent.getMessage());
}
总结
在进行组件、页面间通信的时候,EventBus是一个不错的选择。