官方的自我介绍:
简化组件之间通信 发送者与接收者处理逻辑的解耦 可以在activity, fragment, service之中完美运行 避免了与生命周期打交道,易于检测错误。
个人理解
一个发布事件,订阅事件的系统,与Android自身的广播相比,使用更加简单,不依赖context,可以在不同线程发送/处理事件。
源码实现
为了捉住这个库的主干,我对比看了EventBus的最初版本(即使用git切换到最初的版本),即实现一个最简单的逻辑。
EventBus作为一个单例,里面保存了两个最重要的Map。
1 | //一个事件类型,拥有的的订阅Subscription,(subscriber,method) |
了解这两个键值对,就能大概明白这个模块具体思路。
首先,订阅者Subscriber订阅了事件A,并在onEvent中表达了收到事件后要做什么,表示为method,内部将这个订阅关系保存到系统中, 有了一个Subscription(A,method),并将之放到Map<A,Subscription>中,并且,Subscriber对A事件的订阅关系,保存在typesBySubscriber中。 发布一个事件到EventBus,EventBus根据这个事件类型找到相关的对应关系,并调用该Subscription中的方法。