Android开发Android开发Android开发经验谈

EventBus 简单使用(二)

2018-12-08  本文已影响7人  d74f37143a31

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);
}
上一篇 下一篇

猜你喜欢

热点阅读