EventBus 简单使用(二)

综合技术 2018-12-08 阅读原文

EventBus 简单使用(一)

日更 14 天。

本文主要介绍以下两个知识点,重点是 粘性事件

  • 粘性事件
  • 混淆

上文简单介绍了如何使用使用 EventBus
,它的 post
事件只能接收一次消息,不调用 post
事件,消息处理方法中是不会再接收到事件的。而且 Post
方式的能接收消息的前提是你的 register
需要在 Post
操作之前,否则就会接收不到消息。所以 EventBus的粘性事件
就是为了解决这个问题而生。

Post 事件简单理解就好比我订阅了某杂志社一个月的杂志,杂志社每周六固定给我送一本杂志过来,有一天我想提前看下一周的杂志,这时候还用原来的策略肯定是看不到杂志的。

PostSticky 粘性事件简单理解就好比这时候杂志社为了搞促销,声明了只要是订阅了他们家杂志的用户,都能够收到每期的电子杂志,这时候只要你订阅了这家杂志社的杂志,都会收到电子杂志。

粘性事件 使用例子

发送粘性事件

EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));

处理粘性事件

@Override
public void onResume() {
    super.onResume();
    EventBus.getDefault().register(this);
}
 
/**
* UI updates must run on MainThread
* 这里一定要设置 sticky=true,否则接受不到粘性事件
*/
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEvent(MessageEvent event) {   
    textField.setText(event.message);

    // 如果之后不用该粘性事件可直接移除粘性事件
    EventBus.getDefault().removeStickyEvent(event);
}
 
@Override
public void onPause() {
    EventBus.getDefault().unregister(this);    
    super.onPause();
}

移除粘性事件在上面的代码中也介绍,如果不那么做还可以在

onDestory
中移除

MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class);
// Better check that an event was actually posted before
if(stickyEvent != null) {
    // "Consume" the sticky event
    EventBus.getDefault().removeStickyEvent(stickyEvent);
    // Now do something with it
}

混淆

-keepattributes *Annotation*
-keepclassmembers class * {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
 
# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}
简书

责编内容by:简书阅读原文】。感谢您的支持!

您可能感兴趣的

Vue中eventbus很头疼?我来帮你 你只是想简单的要一个事件的发布订阅来通知下兄弟组件执行个方法? 你是否还在为引入一个每次eventbus后,每次还要手动卸载而头疼? 你是否还在为要去想各种bus的【pub、sub】、【 emit】、【fire、li...
C#总结(六)EventBus事件总线的使用-自己实现事件总线... 在C#中,我们可以在一个类中定义自己的事件,而其他的类可以订阅该事件,当某些事情发生时,可以通知到该类。这对于桌面应用或者独立的windows服务来说是非常有用的。但对于一个web应用来说是有点问题的,因为对象都是在web请求中创建的,而且...
EventBus源码和设计分析(一)观察者订阅... 本文EventBus源码基于3.1.1版本 前言 ​ EventBus是Android开发最常使用到的通信框架,它的源码和设计相对简单,学习开源框架,就从EventBus开始吧。 ​ 它的全部代码结构如下: ...
九、事件总线 0.简介 事件总线就是订阅/发布模式的一种实现,本质上事件总线的存在是为了降低耦合而存在的。 从上图可以看到事件由发布者发布到事件总线处理器当中,然后经由事件总线处理器调用订阅者的处理方法,而发布者和订阅者之间并没有...
EventBus源码剖析(3) — 线程模式 一、简介 EventBus消息支持通过不同线程模式发送,以此满足 Android 不同应用场景的需求。通过订阅者内的订阅方法可知,线程模式是通过注解参数进行配置 二、用法 注册类必须包含至少一个接收事件的方法 @...