eventbus源码解析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

eventbus源码解析
EventBus是一个开源的轻量级Android事件总线,是极其常用的一种解耦方式,基于发布-订阅模式实现,主要用来完成对象之间的消息传递,功能非常强大。

那么,本文将围绕“EventBus源码解析”展开,以揭示其神秘面纱。

1.第一步,说说事件发送和订阅。

EventBus的核心机制就是发布和订阅模型。

在EventBus系统中,事件的发送方和接收方没有直接的引用关系,完全靠反射的方式,系统可以将发送方和接收方的代码耦合度彻底割断,实现消息发布时的解耦,以及消息订阅(注册)时的解耦。

2.第二步,解析订阅方法的生成。

在源码分析中,我们应该先分析如何生成订阅方法。

EventBus通过反射机制,在订阅者的类中调用了onEvent方法并将事件对象传递给该方法。

onEvent方法中包含了可以被调用的接收事件对象的方法。

在订阅者订阅事件时,可以通过使用注解将其方法标记为能够接收事件对象的方法。

具体实现还需看EventBus类的register和unregister函数。

3.第三步,讲一下事件的发送。

在事件发送时,EventBus中的post函数调用了事件的处理函数即subscriber,通过反射机制调用了register函数,最终执行到handler的方法中,利用handler处理函数调用eventBus方法中的proessEvent(Object event,Subscription subscription)传递参数,处理事件和订阅者。

判断订阅者有哪些接收事件,有则是将eventBus.postQueue中的事件与订阅方法做匹配,当有订阅者与发布者关联时,就要比较其线程模式(通过注解运行)。

具体实现还需看EventBus类的post函数。

4.第四步,介绍EventBus的线程模式。

EventBus中有4种线程模式,分别是PostThread,MainThread,
BackgroundThread和AsyncThread。

其中,PostThread为发布线程,MainThread、BackgroundThread和AsyncThread则是三种不同的订阅线程。

具体的实现还需看ThreadMode类。

5.第五步,回顾整个流程。

整个EventBus机制的源码分析最终是将一个事件传递到了订阅者的处理函数上。

在这个过程中,首先在eventBus.postQueue中获取到了发布的事件,然后和订阅者注册的事件一一比较,匹配成功后,再判断订阅者的线程模式,通过反射机制调用它的订阅方法。

而这些处理的过程,也就是EventBus机制的实现,使得事件之间的耦合度彻底割裂,可以更好地完成对象之间的消息传递,实现代码解耦。

以上就是针对“EventBus源码解析”实现的步骤分析,相信能够更好地解决EventBus开发中的疑问,达到更好的开发效果。

相关文档
最新文档