EventBus3.1用法详解

2021-06-07  本文已影响0人  流水潺湲

EventBus 3.0的用法详解(一)
EventBus 3.0的用法详解(二)

EventBus介绍

EventBus是Android和Java的发布/订阅事件总线。从EventBus3.1开始支持普通Java(非android)项目。GitHub的地址

为什么使用EventBus

EventBus的三要素

EventBus的五种线程模型

EventBus常用Api

继承结构

java.lang.Object
    org.greenrobot.eventbus.EventBus

EventBus的使用,注册普通事件

添加依赖库

implementation "org.greenrobot:eventbus:3.1.1"

自定义一个事件类

data class MessageEvent(val message:String)

准备订阅器:声明和注释订阅方法,可选地指定线程模式

@Subscribe(threadMode = ThreadMode.MAIN)
fun onMessageEvent(event: MessageEvent){ /* Do something */ }

在EventBus3.0之前消息处理的方法只能限定于onEvent、onEventMainThread、onEventBackgroundThread和onEventAsync,EventBus3.0之后消息处理的方法可以随便取名,但是需要添加一个注解@Subscribe,并且要指定线程模型(默认为POSTING)

注册和取消订阅事件

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    EventBus.getDefault().register(this)
}

override fun onDestroy() {
    super.onDestroy()
    EventBus.getDefault().unregister(this)
}

发布事件

EventBus.getDefault().post(MessageEvent("发送MessageEvent"))

EventBus的粘性事件

在EventBus中除了普通事件,还支持发送黏性事件,就是在发送事件之后再订阅该事件也能收到该事件

订阅者处理粘性事件

@Subscribe(threadMode = ThreadMode.POSTING, sticky = true)
fun onMessageEvent(event: MessageEvent){ /* Do something */ }

发送黏性事件

EventBus.getDefault().postSticky(MessageEvent("发送MessageEvent"))

在需要的地方调用,订阅注册事件

EventBus.getDefault().register(this)

ProGuard 混淆规则

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

猜你喜欢

热点阅读