事件总线的使用

作用:解决了应用程序内各个组件或者组件和后台服务之间的通信问题
基础用法
源码分析
构造方法:使用了(dcl)确保单例,构造函数中调用了另一种构造方法,使用建造者模式–通过EventBusBuilder 来完成对EventBus的配置和构造。
订阅方法的流程
1.通过Class对象,找到订阅者的所有订阅方法(@subscribe)
2.对每个订阅方法,都需要传入订阅者和订阅方法进行注册。
在这里插入图片描述
订阅所做的事:
1.将Subscriptions根据eventType添加到subscriptionsByEventType(建造者中的一个成分)中。根据subscriber,将订阅事件添加到typesBySubscriber中。
2. 对黏性事件的处理
事件的发送(post函数的源码)
在这里插入图片描述

  1. 获取到PostingThreadState对象,PostingThreadState保存着事件队列和线程状态信息
    从PostingThreadState对象中取出事件队列,然后再将当前的事件插入到事件队列当中
    将队列中的事件依次交由postSingleEvent方法进行处理,并移除该事件
  2. eventInheritance表示是否向上查找事件的父类,它的默认值为true,可以通过在EventBusBuilder中来进行配置。
    当eventInheritance为true时,则通过lookupAllEventTypes找到所有的父类事件并存在List中,
    然后通过postSingleEventForEventType方法对事件逐一处理。
  3. 取出该事件对应的Subscription集合(能够知道那些组件订阅了)并遍历该集合将事件event和对应Subscription传递到 postToSubscription方法中对事件进行处理
  4. 假如 线程模式是MAIN,提交事件的线程是主线程的话则通过反射,直接运行订阅的方法,如果不是主线程,我们需要mainThreadPoster将我们的订阅事件入队列,mainThreadPoster是HandlerPoster类型的继承自Handler,通过Handler将订阅方法切换到主线程执行。
    取消注册
    在这里插入图片描述

总结

主要是通过EventBus对象中的两个互为key的map来完成这个逻辑
核心架构
在这里插入图片描述
使用观察者模式来进行设计

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值