EventBus 简单使用(二)

作者: d74f37143a31 | 来源:发表于2018-12-08 21:22 被阅读7次

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);
}

相关文章

  • 事件总线框架:EventBus 实现原理

    一、简单使用 依赖 Demo 二、EventBus简介 EventBus是一个Android端优化的publish...

  • EventBus

    《EventBus使用详解(一)——初步使用EventBus》 《EventBus使用详解(二)——EventBu...

  • EventBus 简单使用(二)

    EventBus 简单使用(一) 日更 14 天。 本文主要介绍以下两个知识点,重点是 粘性事件 粘性事件 混淆 ...

  • EventBus源码详解

    EventBus笔记 一、EventBus使用 EventBus使用有四步骤: 二、Eventbus.getDef...

  • EventBus3.0使用(一)

    3Steps简单使用EventBus3.0 在使用EventBus 先在Gradle 添加依赖 定义Event事件...

  • Android实际开发中,如何愉快的使用EventBus 3.+

    一、EventBus的使用场景 二、EventBus的介绍 三、EventBus的一般使用步骤(A->B:A页面接...

  • EventBus简单使用

    一、简单介绍 EventBus是一种能够简化各组件间的通信,通过解耦发布者和订阅者简化Android事件传递用以代...

  • EventBus 简单使用

    简单记录下EventBus的使用: setup1 接收页面 setup2 接收页面 setup3 setup4 ...

  • EventBus简单使用

    概述 EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化Android事件传递,这...

  • EventBus简单使用

    Gradle:compile 'org.greenrobot:eventbus:3.0.0' 2.先注册要使用的A...

网友评论

    本文标题:EventBus 简单使用(二)

    本文链接:https://www.haomeiwen.com/subject/obpgcqtx.html