EventBus 3.0详解

EventBus 3.0修改了以前版本用特定名称标记event接收者的方法,改用注解标示 event 接收者。

该注解为 @Subscribe.简单分析了一般流程和部分UML类图。


使用 

         参考 https://github.com/greenrobot/EventBus 

  1. Define events:

    public class MessageEvent { /* Additional fields if needed */ }
  2. Prepare subscribers: Register your subscriber (in your onCreate or in a constructor):

    eventBus.register(this);

    Declare your subscribing method:

    @Subscribe  
    public void onEvent(AnyEventType event) {/* Do something */};
  3. Post events:

    eventBus.post(event);

原理

    订阅类(Subscriber)和方法(Method),以及事件( Event)的封装。

Subscriber指的是接收事件的类,比如 EventBus.getDefault().register(this) 中 this 对象对应的类。

        读取 注解 @Subscribe 对应的信息,将该方法(Method对象)封装成:SubscribeMethod.

        将Subscriber 和 SubscribeMethod 封装成 Subscription类。

        具体封装见 图1


    subscriber, method, event 在 EventBus 中map的维护。

        在  EventBus 中维护着两个重要的map: 

        

    private final Map<Class<?>, CopyOnWriteArrayList<Subscription>> subscriptionsByEventType;
    private final Map<Object, List<Class<?>>> typesBySubscriber;
         subscriptionsByEventType, key 为 eventtype对应的class, entry  为该event的接收者对应的List。

         typesBySubscriber, key 为接收 event 对应的类(Subscriber,即register(this)中的this),entry为该类所接受的事件List(event)


    接收事件的方法的线程(ThreadMode)

        ThreadMode内容可以从注解 Subscribe 读取。有四种mode:

public enum ThreadMode {
    POSTING, // 订阅方法在当前线程执行
    MAIN, // 订阅方法在主线程之行
    BACKGROUND, // 订阅方法在后台线程执行,分2中情况:1是post线程为主线程2 post线程不为主线程
    ASYNC // 新建线程处理该事件
}


图解


图 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值