EventBus基本使用和分析

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);
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_33768280/article/details/79067871
今日推荐