EventBus基本使用
- EventBus介绍
- EventBus使用步骤
- EventBus源码解析
EventBus介绍
项目中往往需要应用程序内各组件间、组件与后台线程间的通信。比如耗时操作,等耗时操作完成后通过Handler或Broadcast将结果通知给UI,N个Activity之间需要通过Listener通信,其实这些都可以通过EventBus轻松实现,EventBus通过发布/订阅(publish/subscribe)方式来管理事件总线。EventBus通过注解和反射机制 将订阅者连同订阅函数保存起来,然后在发送订阅的时候 遍历订阅函数数组进行调用,其实从这方面就可以EventBus执行效率多少会受到一点影响。但是在.3.0中对此问题做了处理:EventBus性能优化之添加索引
EventBus使用步骤
1. 添加依赖 compile 'org.greenrobot:eventbus:3.0.0'
2. 写事件类
public class MessageEvent {
private String message;
public MessageEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
3. 订阅事件
EventBus.getDefault().register(this);
4. 订阅方法
@Subscribe(threadMode = ThreadMode.MAIN)
public void setTextMessage(MessageEvent message) {
...
}
5.发布事件
EventBus.getDefault().post(new MessageEvent("测试"));
EventBus源码解析
1.订阅者和发布者是通过事件的订阅方法的事件参数来关联的
/**
* 根据反射来获取订阅方法的集合,之后遍历此集合
* 由subscribe(subscriber, subscriberMethod);可以看出其关联的关系
*/
public void register(Object subscriber) {
Class<?> subscriberClass = subscriber.getClass();
List<SubscriberMethod> subscriberMethods =
subscriberMethodFinder.findSubscriberMethods(subscriberClass);
synchronized (this) {
for (SubscriberMethod subscriberMethod : subscriberMethods) {
subscribe(subscriber, subscriberMethod);
}
}
}