EventBus使用简介

很早之前就知道EventBus了,只不过一直没时间去了解,最近在做一个项目频繁的使用到Activity之间的数据交互,发现使用startActivityForResult是一件非常痛苦的事情,尤其是在多层Activity之间传递数据。正好趁这几天放假,了解了一下EventBus的大概使用方式,写下这篇博客,当做一个总结。

三步走:

  1. 在EventBus中注册
  2. 写回调方法
  3. 发送消息

一、在使用EventBus之前你必须将当前的类(是的,类,常见的就是我们所使用的Activity以及Fragment等)。

// 使用默认的EventBus实例进行注册
EventBus.getDefault().register(this)

当然你也可以重新创建一个EventBus实例进行注册,就像这样:

EventBus eventBus = new EventBus();
eventBus.register(this);

然后别忘了还要在适当的时候进行注销

EventBus.getDefault().unregister(this);

二、为了能够接受到EventBus发送过来的消息,我们得写几个方法,如:

public void onEvent(String msg) {
    Logger.e("onEvent:" + msg);
}

public void onEventAsync(String msg) {
    Logger.e("onEventAsync:" + msg);
}

public void onEventMainThread(String msg) {
    Logger.e("onEventMainThread:" + msg);
}

public void onEventBackgroundThread(String msg) {
    Logger.e("onEventBackgroundThread:" + msg);
}

这里有几个要注意的地方

1、方法必须为public,为什么要public?

// Starting with EventBus 2.2 we enforced methods to be public (might change with annotations again)

这是源码中SubscriberMethodFinder类findSubscriberMethods方法中的一段注释,别问我为什么。。。

2、方法名必须要以onEvent开头,后面跟MainThread、BackgroundThread、Async或者就以onEvent为方法名,否则会抛出一个EventBusException异常。(当然,我们可以通过使用EventBusBuilder的方式创建EventBus实例,在创建之前通过调用EventBusBuilder中的skipMethodVerificationFor方法就可以了。)
Ok,也就是说EventBus规定了回调的四种方法名,即:onEvent、onEventMainThread、onEventBackgroundThread、onEventAsync。其实这四种方法的回调是有区别的。下面我们来看看枚举ThreadMode中的几个类型:

/*
 * 对应onEvent方法的回调
 * 也就是说onEvent会在调用post方法的线程中被回调
 * 注:不用切换线程进行调用,开销最小,不过应尽快返回,以免可能阻塞主线程
 */
PostThread,

/*
 * 对应onEventMainThread方法的回调
 * 在Android主线程(UI线程)中被回调
 * 注:尽快返回,以免阻塞主线程
 */
MainThread,

/*
 * 对应onEventBackgroundThread方法的回调
 * 在主线程中post:会另起一个线程进行回调
 * 在线程中post:在post所在的线程中被回调
 * 注:使用这种模式时应尽快返回,防止阻塞线程
 */
BackgroundThread,

/*
 * 对应onEventAsync方法的回调
 * 在一个独立的线程中被回调(独立于主线程以及post方法被调用的线程)
 * 注:适用于执行一些耗时操作
 */
Async

好了,知道这几种方法在什么时候被调用,我们就可以根据具体场景选择不同的回调方法。

3、回调方法的参数只能为1个,否则是无法正常回调的

三、调用post发送消息,就像这样:

EventBus.getDefault().post("Msg From SecondActivity in UIThread");

这里注意一下,post方法的参数需要与onEvent系列方法的参数匹配,否则是无法正常回调的。

以下是本人写的一个非常简单的Demo:
https://github.com/asdgbc/AndroidDemos.git

最后,享受EventBus带来的便利吧。

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值