概述
定义:一个发布/订阅的事件总线框架。
包含:
- 发布者
poster
- 订阅者
subscriber
- 事件
event
- 总线
thread
EventBus 角色关系如图所示:
示例代码:
1 | public class EventBusActivity extends AppCompatActivity { |
** EventBus.getDefault().register(this);
**
作用:扫描了当前类的所有方法,把匹配的方法最终保存在subscriptionByEventType(Map(key:eventType,value:CopyOnWriteArrayList<Subscription>))
中。其中eventType
是我们方法参数的 class,Subscription 中则保存着subscriber,subscriberMethod(method,threadMode,eventType,),priority;(subscripber:即我们订阅Event的类Activity)
onEventXXX:决定当前的方法最终运行在上面线程和怎么运行。
** EventBus.getDefault().post(param);
**
作用:将参数 param 发布出去,EventBus 会在它内部存储的方法中,进行扫描,找到参数匹配的,就使用反射进行调用。
** EventBus.getDefault().unregister(this);
**
作用:反注册 EventBus 的监听。
总结
通俗的解释原理就是:EventBus 在其内部存储了一堆定义的以 onEvent 开头的带参数方法,然后调用post(param)
的时候,格局 post 传入的参数,去找到匹配的方法,然后通过反射区调用该方法。