EventBus3.0+ 使用入门

简介

Github地址
EventBus是一个在Android上使用的发布/订阅事件总线,能够简化组件间的通信,解耦事件的发送和接收。

使用场景

在我们平常项目开发的时候,经常会用Intent在界面之间相互通信,或者使用Handler在线程间进行通信,或者广播通知。当项目越来越大时,各模块之间代码耦合度越来越高,相互通信很容易搞混。而EventBus极大的简化了组件间的通信,并且很好的解决了代码耦合度的问题。

EventBus三要素

1、event:自定义事件,可以是任意类型。
2、Publisher:事件发布者,可以在任意线程发布事件,EventBus为我们提供了EventBus.getDefault()获取EventBus对象,并通过post(event)的方式发布事件。
3、Subscriber:事件订阅者,通过EventBus给我们提供的注解@Subscribe(threadMode)为处理事件的函数指定线程。

线程模型

由ThreadMode这个类我们可以看出,EventBus为我们提供五种线程模型,分别是:

1、POSTING:默认模式,指定事件处理函数在发布事件所处线程中执行。
2、MAIN:指定事件处理函数在主线程(UI线程)中执行。
3、MAIN_ORDERED:指定事件处理函数在主线程(UI线程)中执行,事件会首先进入队列然后才会发给订阅者,严格保证了事件执行的顺序性。
4、BACKGROUND:有两种情况
 1、如果发布事件的线程是在主线程,则重新开启一个线程执行事件处理函数;
 2、如果发布事件的线程是在后台线程,则事件处理函数会在当前线程中执行;
5、ASYNC:无论发布事件的是哪一个,都会重新开启一个线程执行事件处理函数,一般用于网络访问、数据库读写等需要执行时间的操作。

基本使用

EventBus的使用非常简单,主要有三个步骤:
 1、自定义事件
 2、订阅事件并且定义事件处理函数
 3、发布事件

添加依赖

在项目的build.gradle中添加依赖

implementation 'org.greenrobot:eventbus:3.1.1'
自定义事件类型

这个类就是用来定义事件传输所需要的数据,没有任何特殊要求,可以根据实际需求定义。

public class MessageEvent{

    private String message;
    
    public  MessageEvent(String message){
        this.message=message;
    }
    
    public String getMessage() {
        return message;
    }
 
    public void setMessage(String message) {
        this.message = message;
    }

}
注册事件
@Override
protected void onCreate(Bundle savedInstanceState) {           
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     // 注册事件
     EventBus.getDefault().register(this);
}

//  定义事件处理函数
@Subscribe(threadMode = ThreadMode.MAIN)
public void test(MessageEvent event) {

    Log.e("gybguohao","收到的事件消息 = " + event.getMessage());
    
}

其中事件处理的函数名可以随便定义,只需要通过EventBus提供的@Subscribe注解,并且指定线程模型就行了。
事件处理函数的参数是你需要订阅的事件类型,这个例子中也就是上面创建的MessageEvent。
注意:事件处理函数必须是public权限,有且仅有一个参数。

发布事件
MessageEvent me = new MessageEvent("通过EventBus发布的事件");
EventBus.getDefault().post(me);

在项目中需要的地方发布事件,只要注册并且订阅了该事件类型的地方都会收到该事件。

解除注册
@Override
protected void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);
}

最后,别忘了在适当的时候解除注册,释放内存,这与平时我们使用的广播很相似。

你可能感兴趣的:(EventBus3.0+ 使用入门)