深入了解EventBus

一、使用EventBus带来的好处和目的

主要功能是替代Intent、Handler、BroadCast在Fragment、Activity、Service、线程之间传递消息。

最牛逼优点是开销小,代码简洁,解耦代码。

二、EventBus的基本使用

1、implementation 'org.greenrobot:eventbus:3.0.0'

2、onCreate中订阅

EventBus.getDefault().register(this);

3、onDestroy中取消订阅

EventBus.getDefault().unregister(this);

4、发送消息

   //post(Object event)参数是自定义的,接收的地方也是对应自定义的
                EventBus.getDefault().post(new NetworkChangeEvent(isConnected));

5、接收

//接收页面的Event的值跟EventBus.getDefault().post(obj);
    // 的发送的值相同,则此页面就接收到通知,如果多个页面都有同一个event,则这几个页面都可以收到通知。
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onNetChangeEvent(NetworkChangeEvent networkChangeEvent){
        hasNetWork(networkChangeEvent.isConnected);
    }

其他用于接收的方法

 @Subscribe(threadMode = ThreadMode.POSTING)

 @Subscribe(threadMode = ThreadMode.MAIN)

 @Subscribe(threadMode = ThreadMode.BACKGROUND)

  @Subscribe(threadMode = ThreadMode.ASYNC)

区别:

POSTING默认方式:发布和接收在同一线程。
MAIN:无论在哪个线程发都会在主线程收。
BACKGROUND:子线程发主线程收;主线程发子线程收。
ASYNC:无论哪个线程发都会在主线程收。

三、原理解析

每个新建的EventBus发布和订阅事件都是相互隔离的。

EventBus实质就是观察者模式。说俗点通过分析和上图可以直观认为上图中EventBus椭圆是一个具备存储匹配方法的一个单例对象;右侧Subscriber块的onEventXXX就是这些匹配方法;左侧的post就是根据参数去查找反射调运右侧那些已定义的onEventXXX方法。

通过反射机制筛选订阅者里面的方法

经过修饰符、参数个数、是否有注解、和订阅者是否有 eventType 相同的方法几层条件的筛选,最终将订阅方法添加进 findState 的 subscriberMethods 这个 List 中。EventBus 不仅仅获取当前类的订阅方法,还会获取它所有父类的订阅方法。

大神对原理的解析

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值