为什么要用EventBus
当我们的项目进行开发的时候,往往需要各种的Intent,广播,接口回调,Handler等各种方式进行通信。当我们的项目越来越大,逻辑越来越复杂的时候,会造成代码量大,高度耦合等各种问题,导致项目维护成本越来越大,这个时候如果用EventBus就可以很好的解决一系列问题。
EventBus三要素
- Event 事件,可以是任意类型。
- Subscriber 事件订阅者 3.0之后函数名字可以随便取,使用注解的方式进行订阅。
- Publisher 事件发布者,我们可以在任意线程里发送事件,一般情况下使用EventBus.getDefault()就可以得要一个EventBus对象,调用他的函数post(object)即可发送一个事件。
四种线程模型
- POSTING 默认模式:在哪个线程发送事件,就在哪个线程处理事件。
- MAIN 主线程模式:不管在哪个线程发送事件,都在主线程处理事件,因此不能在这个事件里处理耗时任务。
- BACKGROUND 后台模式:都会在后台线程去处理事件,在这个线程里不能更新UI。如果当前线程是在后台线程,那么就会在当前线程里处理事件,如果当前是在主线程,那么就会开启一个后台线程去处理任务。
- ASYNC 子线程模式:不管在哪个线程发送事件,都会开启一个子线程去处理任务。
EventBus的使用
首先引入依赖
implementation 'org.greenrobot:eventbus:3.1.1'
Eventbus分为粘性事件和普通事件,