EventBus简介及初步使用

EventBus简介

EventBus是一个Android和Java的发布/订阅事件总线模型,其模型图如下所示: EventBus模型

EventBus的优点有: 1. 简化组件之间的通信 2. 简化代码 3. 快速,小巧(~50K jar) 4. 具有线程分发、订阅优先级等高级特性

从模型图中可以看到几个概念: 1. Publisher:发布者,发布事件,事件的产生者 2. Event:事件,封装了要传递的内容 3. Subscriber:订阅者,对事件感兴趣的消费者 4. EventBus:事件总线,管家,将事件分发给正确的Subscriber进行处理

初步使用

在Android中考虑一个场景,Activity A需要显示一个从网站上下载的内容,该下载任务在Activity B中进行,完成后,将内容通知给Activity A进行显示。

不使用EventBus的情况

不使用EventBus的情况下,Activity A使用startActivityForResult请求Activity B,Activity中开启线程进行网络任务,完成后将结果通过setResult返回。 Actiivty A的代码如下:

private TextView showContentTv;

public void downloadPage(View view) {
        startActivityForResult(new Intent(this,SecondActivity.class),0);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        showContentTv.setText(data.getStringExtra("content"));
    }

Activity B的代码如下:

使用EventBus的情况

EventBus的基本使用包含三个步骤: 1. 定义事件 例子中下载内容就是一个String类型的字符串,可以简单定义:

  1. 准备订阅者 由于上面例子中Activity A是要显示Activity B下载的内容,因此Activity A是事件的消费者,在其中声明一个方法如下:

    另外,还需要将Subscriber注册到EventBus中,这个需要在Activity的生命周期方法中进行注册,如下:

  2. 发布者发布事件 Activity B完成下载后,需要将内容打包成Event,然后发送出去,

    总结

    经过两种方式的对比,可以看到接入EventBus是一件很简单的事情,并且EventBus可以带来很好的解耦性。

Last updated