一、EventBus 介绍
EventBus 利用发布-订阅者模式进行解耦,简化各组件之间通信的复杂度。并且 EventBus 易于入门,API 简单,作为目前的主流开发框架,配合 Kotlin+MVVM+Retrofit,可以搭建起商业级的应用架构。
二、如何使用
步骤 ①:导包
implementation 'org.greenrobot:eventbus:3.0.0'
步骤 ②:定义事件
class LikeEvent:MessageEvent() {
/**
* item对应id
* */
lateinit var id:String
}
步骤③:注册和解除
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
步骤 ④:订阅者
@Subscribe(threadMode = ThreadMode.MAIN)
fun onMessageEvent(messageEvent: MessageEvent) {
when(messageEvent){
is LikeEvent -> {
//
}
}
}
步骤 ⑤:发送事件
helper.getView<CheckBox>(R.id.iv_like).setOnClickListener {
val event = LikeEvent()
event.id = item.id
EventBus.getDefault().post(event)
}
注意点
订阅者对应的方法必须是 public,返回值为空,并且只有一个参数,否则将接收不到事件。
三、代码说明
Event:一般是实体类,用于事件信息的传送。
Subscriber:事件的接收者,接收事件的方法必须为public,同时用@Subscriber
注解说明。
在注解当中可以指定事件订阅者所处的线程:
①POSTING:事件的订阅者与事件的发送者处于同一线程。这是默认的线程设置。
②MAIN:事件的订阅者将在MAIN线程中执行,如果事件的发布者在MAIN线程,发布者的进程将被阻塞。
③BACKGROUND:如果事件是从MAIN线程发布出来的,事件的订阅者接收到事件后,将在新的子线程当中执行。如果事件是从子线程发布出来,事件的订阅者接收到事件后,将在该子线程当中执行,注意:此时,执行的方法当中不能涉及到UI操作。
④ASYNC:事件的接收者接收到事件后,将在新的子线程当中执行方法,注意:方法当中不能涉及到UI操作。
Publisher:事件的发送者,使用EventBus.getDefault()
方法获取到EventBus对象,再调用post()
方法将事件对象发送出去。
四、总结
EventBus的使用非常的简单,其难点主要是配合其他主流框架的使用,构建更简洁的代码。
五、参考文献
EventBus
概述:这是EventBus的官方文档。