EventBus源码解析(一):概述
EventBus源码解析(二):Register
EventBus源码解析(三):Post/PostSticky
EventBus源码解析(四):优化-EventBusIndex
EventBus is a publish/subscribe event bus for Android and Java.eventbus是基于观察者的模式设计的库,能够实现对事件的分发处理,也解耦了代码。但如果忘记做注销操作,就会造成内存泄漏
EventBus分为四个步骤:
- (EventBusIndex)项目编译期可以利用APT预解析带@Subscribe的类,减少运行时分发事件的时间,但这步也是可以选择不做的。
- (Register)注册需要监听的类到EventBus里面
- (post/postSticky)任何地方都可以发布事件,事件分为两种,普通事件和sticky事件,后者主要的作用是事件发送之后新订阅这个事件的类会拿到上一个同类型的事件
- (unregister)Register的类记得要在销毁的地方做unregister,不然会造成内存泄漏
其实EventBus的核心原理很简单,用一个全局类维护观察者模式的功能,其他加了一些优化点:
1.通过注解的方式注册监听回调方法
2.监听者可以设置优先级
3.维护类许多Cache缓存解析过的数据,不用重复查找
4.添加sticky功能,使刚注册的对象能拿到监听类型前面发布过的事件
5.事件也可以通知到监听事件父类事件的方法
6.监听回调可以设置在不同线程响应
//监听MessageEvent事件,在主线程响应
@Subscribe(threadMode = ThreadMode.MAIN)
fun onMessageEvent(event: MessageEvent) {
}
//监听StickyMessageEvent事件,在主线程响应,如果之前有发布过该事件,则注册的时候会收到
@Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
fun onMessageEvent(event: StickyMessageEvent) {
}
EventBus.getDefault().post(MessageEvent("123"))
EventBus.getDefault().postSticky(StickyMessageEvent("1234"))
使用方法就不在这里做具体介绍