上一篇博客我为大家简单介绍了一下EventBus的基本用法,今天是有关EventBus的第二篇——利用EventBus发布粘性事件
首先,简单介绍一下什么是粘性事件。一句话说,就是先发布事件,后注册订阅者,订阅函数仍然可以接收到事件消息,这种事件,称为粘性事件。
打个比方,我在一个Activity里发出消息,然后进入到另外一个Activity里面,一般来说,都是需要先注册的Activity才能接受到刚才发送来的消息。
但是如果是订阅了粘性事件的Activity就可以实现获得先注册的事件里的消息。这一点在开发中是比较常用的一点
那么,接下来就要开始正文了,如何利用EventBus发布和订阅粘性事件呢?
还是分步骤来讲
首先,自然还是要导入这个库了
compile 'org.greenrobot:eventbus:3.0.0'
第一步
//注册EventBus,通常在onStrat方法中执行
EventBus.getDefault().register(this);
第二步
//注销EventBus,通常在onStop方法中注销
EventBus.getDefault().unregister(this);
以上两步是不变的
第三步
发布粘性事件:
EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));
第四步
订阅粘性事件:
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEvent(MessageEvent event) {
//接受到粘性消息,执行处理
}
这样一来,我们的Activity或者Fragment就可以接受到发送来的粘性事件了
当然,我们还可以对粘性事件进行消除
消除粘性事件有以下两种方法
//第一种方式
//得到发布的粘性消息对象
MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class);
//如果不为空,调用方法进行移除
if(stickyEvent != null) {
EventBus.getDefault().removeStickyEvent(stickyEvent);
}
//第二种方式
//直接移除粘性消息对象
MessageEvent stickyEvent = EventBus.getDefault().removeStickyEvent(MessageEvent.class);
好了,第二篇就先到这里了,再见!