概要
上一篇文章我们了解了EventBus的使用方法,但是使用久了就会发现有些地方还是挺麻烦的,比如每次都要在Activity/Fragment的onCreate方法中进行注册,在onDestory方法中进行销毁,还要写onEventMainThread方法接收消息,而且大部分App在开发的时候都会有一个BaseActivity基类,本来BaseActivity中就承载了许多的公用方法,那么是不是可以把EventBus的这些方法也写在基类中,通过某个开关或者所是方法进行判读是否需要注册消息监听呢,答案是肯定的。
BaseActivity中的注册开关(决定子类是否需要注册事件分发):
/**
* 是否注册事件分发
* true表示绑定EventBus事件分发,默认不绑定,
* 子类需要绑定的话
*
* @return
*/
public boolean isRegisterEventBus() {
return false;
}
BaseActivity中的onCreate方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (isRegisterEventBus()) {
EventBusUtil.register(this);
}
}
BaseActivity中的onDestory方法:
@Override
protected void onDestroy() {
super.onDestroy();
if (isRegisterEventBus()) {
EventBusUtil.unregister(this);
}
}
接下来就是监听消息的入口了:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventBusCom(MessageEvent event) {
if (event != null) {
receiveEvent(event);
}
}
/**
* 接收到分发的事件
*
* @param event
*/
public void receiveEvent(MessageEvent event) {
// 子类重写方法
}
当接收到EventBus的消息后,onEventBusCom方法会被调用,子类Activity只需要重写receiveEvent方法即可接收到消息,并提取出event中携带的数据,进行相关的操作。而且,如果子类不需要接收任何消息,不必做任何操作,应为默认是不注册消息监听的。
代码中的EventBusUtils类也是自己重新定义的,方便消息的注册、解绑和消息的发送,Android原生API中总是有许多累赘的东西,比如弹一个吐司,每次都要写很长的一句代码:
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
而进行二次封装后变成:
public void toast(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
下次只需要传递一个你想提示的文字,调用toast方法即可,简单方便了很多。
以下是EventBusUtils的代码:
public class EventBusUtil {
public static void register(Object subscriber) {
EventBus.getDefault().register(subscriber);
}
public static void unregister(Object subscriber) {
EventBus.getDefault().unregister(subscriber);
}
public static void sendEvent(MessageEvent event) {
EventBus.getDefault().post(event);
}
}
经过这么一改造,代码瞬间就高大上了一些了,更加具有结构性,菜鸟们还在每个具体的Activity中进行注册、销毁、监听,而你从现在开始就不用这样啦。