Android

AndroidのEventBus

2021-03-03  本文已影响0人  耑意儿
目录:
1.1 EventBus的实现原理
1.2 EventBus的基本使用
1.3 EventBus的ThreadMode
1.4 当前常用的事件总线对比

EventBus 原理解析
用LiveEventBus替代RxBus、EventBus
LiveEventBus的使用
【侵权删】

1.1 EventBus的实现原理

EventBus是一种基于观察者模式的发布/订阅事件总线框架
EventBus的注册,通过反射的方式获取到观察者的事件、方法、所在线程。
以事件类型为key键将这些信息存入到Map中。
事件发布者将事件通过post方法发送到EventBus中,EventBus将指定的事件分发给订阅者。

image.png

EventBus使用Subscribe注解可以指定threadMode,sticky,priority
EventBus.getDefault()是一个单例方法
可以通过配置EventBusBuilder来更改EventBus的属性

1.2 使用:

注册: EventBus.getDefault().register(this);
注销:EventBus.getDefault().unregister(this);
定义事件:普通类,变量+载入变量的构造函数
发送事件:构造事件并发送:EventBus.getDefault().post();
接收事件:添加注解Subscribe,指定线程,参数是事件

@Subscribe(threadMode = ThreadMode.MAIN)
public void onReceiveEvent(AEventModel aEvent) {
}

其他方法:
判断是否已经注册:EventBus.getDefault().isRegistered(this)

完整案例:

// 注册:
private void initEventBus() {
    if (!EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().register(this);
        }
    }
    
// 注销:
@Override
protected void onStop() {
    super.onStop();
    if (isFinishing()&&EventBus.getDefault()
        .isRegistered(this)) {
            EventBus.getDefault().unregister(this);
        }
    }

// 发送
AEvent aEvent = new AEvent("1", msgId);
EventBus.getDefault().post(aEvent);   
    
// 接收
@Subscribe(threadMode = ThreadMode.MAIN)
public void onReceiveEvent(AEvent event) {
    ...
}

1.3 EventBus的ThreadMode

线程模式 决定了在当前线程线程发送事件后是在当前线程接收处理事件,还是回到主线程处理事件,亦或是新开一个线程处理事件。
EventBus提供了五种线程模式:

1.4 当前常用的事件总线对比

image.png
为什么要用LiveEventBus
上一篇下一篇

猜你喜欢

热点阅读