EventBus的简单介绍

EventBus是什么?

EventBus,顾名思义,是“事件总线”的意思。更具体的说是一个针对Java和Android的事件发布/订阅框架(EventBus is a publish/subscribe event bus for Android and Java.)

GitHub地址:https://github.com/greenrobot/EventBus

图示:

EventBus的简单介绍

 

EventBus的使用

1.定义事件

public class MessageEvent {

    private String name;

    public MessageEvent(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "MessageEvent{" +
                "name='" + name + '\'' +
                '}';
    }
}

2.订阅

普通订阅:

需要先进行注册,然后在有相对应的信息发出时,可以获取到信息。

//注册和移除需要确定在哪个生命周期进行
//注册
EventBus.getDefault().register(this);
//移除
EventBus.getDefault().unregister(this);

//事件处理:
//threadMode有四种类型(MAIN、POSTING、BACKGROUND、AYSNC)
@Subscribe(threadMode = ThreadMode.MAIN)
    public void MessageEventBus(MessageEvent event) {
        tvEventbusResult.setText(event.toString());
    }

 粘性订阅

不需要先注册,当已粘性信息发出在前,注册时即收到信息。

//注册和移除需要确定在哪个生命周期进行
//注册
EventBus.getDefault().register(this);
//移除
EventBus.getDefault().removeAllStickyEvents();
EventBus.getDefault().unregister(this);

//事件处理:
//threadMode有四种类型(MAIN、POSTING、BACKGROUND、AYSNC)
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
    public void MessageEventBus(MessageEvent event) {
        tvEventbusResult.setText(event.toString());
    }

3.发送事件

//发送普通事件
EventBus.getDefault().post(new MessageEvent("普通事件"));
//发送粘性事件
EventBus.getDefault().postSticky(new MessageEvent("粘性事件"));

 

EventBus原理

EventBus运用注解和反射技术,发布/订阅模式、单例模式,通过一系列的操作,实现消息的发送和接收(具体见EventBus源码)

 

思考:

结合github上EventBus的介绍,和一些具体介绍EventBus使用的博客,并进行一定的编码测试,可以做到对EventBus的初步了解和使用。

深入了解的话,还是要结合源码,一点点分析其设计思想和使用到的语言相关技术和设计模式等。

知其然易,知其所以然难。

 

--End

上一篇:ASP.NET Core基于微软微服务eShopOnContainer事件总线EventBus的实现


下一篇:Flutter跨组件传递事件