EventBus 3.0 体验

EventBus是用于Android和Java的发布/订阅事件总线

这里写图片描述

原理:发布者发布事件,订阅者通过EventBus接收事件,做出相应的响应。

EventBus的优点有:
1.简化组件间的通信
2.使代码更加简洁
3.具有高级特性,如交付线程、订阅者优先级等
4.框架体积小

EventBus的具体使用
1.定义事件实体类
例如:

public class NightMessageEvent {

    private boolean isNight;

    public NightMessageEvent(boolean isNight) {
        this.isNight = isNight;
    }

    public boolean isNight() {
        return isNight;
    }

    public void setNight(boolean night) {
        isNight = night;
    }
}

类名和类的具体业务由自己决定,我这里使用了一个Boolean值用于判断状态。

2.向EventBus注册,成为订阅者以及解除注册,并声明订阅方法

在需要接收的Activity或者Fragment中注册和解除注册:

 @Override
    protected void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }

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

同上,在需要接收的地方做事件的接收:

@Subscribe(threadMode = ThreadMode.POSTING)//我这里由于是同一个线程,所以用POSTING
    public void onNightEvent(NightMessageEvent nightMessageEvent){
        //这里是接收到事件后,自己的操作
        boolean night = nightMessageEvent.isNight();
        initNavigationTabBar(night);
    }

3.发送事件:

EventBus.getDefault().post(new NightMessageEvent(true));

在需要发送事件的地方发送即可。

总体用起来真的很简单方便。

这里还有一点需要注意:在第二步中用到了一个ThreadMode,它是一个枚举类型,有着以下几个类型:

POSTING:表示订阅方法运行在发送事件的线程。

MAIN:表示订阅方法运行在UI线程,由于UI线程不能阻塞,因此当使用MAIN的时候,订阅方法不应该耗时过长。

BACKGROUND:表示订阅方法运行在后台线程,如果发送的事件线程不是UI线程,那么就使用该线程;如果发送事件的线程是UI线程,那么新建一个后台线程来调用订阅方法。

ASYNC:订阅方法与发送事件始终不在同一个线程,即订阅方法始终会使用新的线程来运行。

ThreadMode默认是使用POSTING的,如果需要更改设置,可以在添加注解的时候同时为threadMode赋值。

至于priority 优先级 sticky 粘性事件等用到的时候再说吧

最后提一下,忘了一点,需要先在build.gradle中引入:
compile ‘org.greenrobot:eventbus:3.1.1’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值