EventBus的小tips

牧云@^-^@ 提交于 2020-02-03 18:42:05

1. EventBus的线程模式

2.黏性事件

3. 配置混淆规则

.
.
.
.

0.EventBus的简介

一个Android事件发布/订阅轻量级框架,
功能:通过解耦发布者和订阅者简化Android事件传递 [2] 
EventBus可以代替Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据,执行方法。
特点:代码简洁,是一种发布订阅设计模式(观察者设计模式)。

.
.

1. EventBus的线程模式 ThreadMode

因为安卓对线程的严格限制,EventBus也相应的进行的不同的线程控制。通过指定线程模式,我们可以控制订阅回调函数运行于哪一个线程。
线程模式主要有:
POSTING:在哪个线程发布就在哪个行程执行
MAIN:在主线程执行,如果订阅方回调事件较为耗时,则发布方的后续指令会被阻塞。
MAIN_ORDERED:发布后会立即执行后续的指令,不会被订阅方回调事件阻塞。
BACKGROUND:在后台线程执行(非UI线程),如果发布方在非UI线程,则订阅方也会在相同的线程,如果发布方在UI线程,则订阅方会新建一个线程,并在该线程中执行。
ASYNC:不管事件在哪个线程发布,都会在独立的新开的线程中执行。可以执行耗时操作

2.黏性事件

在一般情况下我们使用EventBus的顺序应该是先订阅,后发布。但黏性事件可以实现先发布后订阅。

3. 配置混淆规则

在我们打包生成APK时,系统为了使我们的包尽可能的小,可能会删除一些我们没有使用的函数。在EventBus中,我们的订阅事件的函数是通过反射来运行的,所以有被删除的风险,所以我们要配置它的混淆规则。
在proguard_rules.pro文件中,我们加入以下代码即可:

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!