个人作业——技术博客(EventBus的使用说明)


一、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,返回值为空,并且只有一个参数,否则将接收不到事件。


三、代码说明

image

Event:一般是实体类,用于事件信息的传送。


Subscriber:事件的接收者,接收事件的方法必须为public,同时用@Subscriber注解说明。

在注解当中可以指定事件订阅者所处的线程:

①POSTING:事件的订阅者与事件的发送者处于同一线程。这是默认的线程设置。

②MAIN:事件的订阅者将在MAIN线程中执行,如果事件的发布者在MAIN线程,发布者的进程将被阻塞。

③BACKGROUND:如果事件是从MAIN线程发布出来的,事件的订阅者接收到事件后,将在新的子线程当中执行。如果事件是从子线程发布出来,事件的订阅者接收到事件后,将在该子线程当中执行,注意:此时,执行的方法当中不能涉及到UI操作。

④ASYNC:事件的接收者接收到事件后,将在新的子线程当中执行方法,注意:方法当中不能涉及到UI操作。


Publisher:事件的发送者,使用EventBus.getDefault()方法获取到EventBus对象,再调用post()方法将事件对象发送出去。

四、总结

EventBus的使用非常的简单,其难点主要是配合其他主流框架的使用,构建更简洁的代码。

五、参考文献

EventBus
概述:这是EventBus的官方文档。

原文地址:https://www.cnblogs.com/aahorse/p/13124717.html