eventbus原理

https://www.jianshu.com/p/d9516884dbd4

根据上面的讲解 来简化原理

EventBus.getDeafault.register(this)

1.传入对象,利用反射得到消息回调的方法列表

2.这些方法循环与对象绑:主要干了两件事情,加入两个map  a.第一个map

subscriptionsByEventType   (evnetType  list<Subscription(sucriber, method)>)

方法的参数也就是消息类型eventType为key     value为Subscription列表      Subscription传入了对象和方法. 这个map很重要就是post的时候需要根据eventType来获得 对象和方法 循环 反射调用

b.对象为key  value为list list里面是方法参数类型 

typesBySubscriber

(subscriber, list<eventType>())

这个map 用处不是特别大  主要就是用来判断对象有没有注册

 

EventBus.getDeafault.unregister(this)

正好是与register相反的一个过程

删除两个对应map里面相关的eventType  和subscribe

post(eventType)

可以获取到当前的线程状态

然后把eventType加入到队列里面

然后循环队列

根据eventType 去拿到list<subscription<suscriber, method>>

然后循环发送  event   subscribtion  是否是主线程

接着上边的继续分析,postToSubscription()内部会根据订阅事件方法的线程模式(method 上的注解有),间接或直接的以发送的事件为参数,通过反射执行订阅事件的方法。(异步的有线程池)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值