EventBus初体验(二)

背景:

上一篇EventBus初探遇到一个问题就是在 startActivity(intent);之后立即发送EventBus.getDefault().post(new MessageEvent(“我是EventBus发送到消息”));这个消息,下个界面时无法接收到消息的,当时心里一万只cnm在翻腾,这nm用起来有多少场景不能用。后来才知道EventBus是有粘性事件的,对,你没有看错,是粘性事件,和Android的粘性广播一个道理。现在就来简单的研究一下这个东东怎么用,大神请绕过(http://greenrobot.org/eventbus/documentation/configuration/sticky-events/)。

何为粘性事件:

看官网如何解释:Some events carry information that is of interest after the event is posted. For example, an event signals that some initialization is complete. Or if you have some sensor or location data and you want to hold on the most recent values. Instead of implementing your own caching, you can use sticky events. So EventBus keeps the last sticky event of a certain type in memory. Then the sticky event can be delivered to subscribers or queried explicitly. Thus, you don’t need any special logic to consider already available data.

看谷歌如何翻译:事件发布后,有些事件携带有兴趣的信息。 例如,事件表明一些初始化完成。 或者如果您有一些传感器或位置数据,并且要保持最近的值。 而不是实现自己的缓存,您可以使用粘性事件。 所以EventBus将某个类型的最后一个粘性事件保留在内存中。 然后可以将粘性事件传递给用户或明确查询。 因此,您不需要任何特殊的逻辑来考虑已经可用的数据。

我的理解就是:EventBus是基于订阅者模式开发的,那么就存在订阅的问题,如果在订阅前就把消息发送出来了,那么之后的订阅者就无法收到消息了,比如本文的背景提到的,这个粘性事件就是把消息保存在内存中,使之后的订阅者也可以收到这个消息。当然内存保留太多的消息总会影响性能,这个时候就可以使用EvenBus提供的API删除这些粘性消息。

那么如何使用呢?很简单:

使用步骤:

1. 在你发送消息的时候使用
EventBus.getDefault().postSticky(new MessageEvent("我是EventBus发送过来的消息"));替代:
//EventBus.getDefault().post(new MessageEvent("我是EventBus发送到消息"));
2.接收处理消息的时候:
//增加sticky = true这个参数,值为true,非粘性事件为true
@Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
public void getMessage(MessageEvent messageEvent) {
    String getMessage = messageEvent.getMessage;
    tv_receive.setText(getMessage);
}

效果:

如何取消呢?官方提供了几个重载的方法:

 MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class);//获取事件类型
 if (stickyEvent!=null){
        EventBus.getDefault().removeStickyEvent(stickyEvent);//取消指定类型的消息
 }
 //EventBus.getDefault().removeAllStickyEvents();//移除所有的类型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值