- EventBus原理
- EventBus简单使用
- EventBus性能
1.EventBus:能够在不同组件Activity等等通信的原理即 一个static的单例对象,成员变量是一个List等容器
注册时 用来存放观察者(List.add)
发送时 用来通知观察者
2.EventBus既可以在一个Activity里面使用,又可以在两个Activity中使用,不管当前显示的是哪个,只要Activity存在,消息就会发送成功。好比 EventBus.getDefault().register(this);就是一个BroadCastReceiver
- EventBus.getDefault().register(this);执行流程
- EventBus中维护一个 mMethodHunter对象,该对象用来查找this即Subscriber的所有标有注解的所有方法
- EventBus.getDefault().post事件
3.使用方法:Event3.0详细使用
4.EventBus的优势在于调度灵活。不依赖于 Context,使用时无需像广播一样关注 Context 的注入与传递,也解除了Handler所带来的耦合,父类对于通知的监听和处理可以继承给子类,这对于简化代码至关重要;通知的优先级,能够保证 Subscriber 关注最重要的通知;粘滞事件(sticky events)能够保证通知不会因 Subscriber 的不在场而忽略。可继承、优先级、粘滞,是 EventBus 比之于广播、观察者等方式最大的优点,它们使得创建结构良好组织紧密的通知系统成为可能。
但EventBus也有很明显的缺陷,在EventBus中事件的分发是通过注解函数的参数类型确定的,因此在事件发布遭到大量滥用时,特别有多个订阅者、多个相同参数时,很难从事件发布者开始理清消息流,无法快速的找出是哪个订阅者接受并处理了消息导致的问题,这就要求了参与者必须对整个通知过程有着良好的理解。当程序代码适量时,这是一个合理的要求,然而当程序太大时,这将成为一种负担。在EventBus中一定要写好必要的注释信息,否则在后续工作交接中会产生很多不必要的麻烦。