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);
}
小王不是胖虎
发布了29 篇原创文章 · 获赞 10 · 访问量 5533
私信
关注