综合技术

EventBus 简单使用(二)

微信扫一扫,分享到朋友圈

EventBus 简单使用(二)
0

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);
}
阅读原文...

简书

HelloEOS周报第15期 | 10.15–10.21

上一篇

分析师下调苹果2019年第一季度iPhone出货预期

下一篇

您也可能喜欢

评论已经被关闭。

插入图片
EventBus 简单使用(二)

长按储存图像,分享给朋友