Android Jetpack-LiveDataBus使用
程序员文章站
2022-06-07 18:22:09
...
文章目录
参考:
https://github.com/JeremyLiao/LiveEventBus
LiveEventBus是一款Android消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP
LiveEventBus的特点
- 生命周期感知,消息随时订阅,自动取消订阅
- 支持Sticky粘性消息
- 支持AndroidX
- 支持跨进程通信
- 支持跨APP通信
- 支持设置LifecycleObserver(如Activity)接收消息的模式:
- 整个生命周期(从onCreate到onDestroy)都可以实时收到消息
- **状态(Started)可以实时收到消息,非**状态(Stoped)无法实时收到消息,需等到Activity重新变成**状态,方可收到消息
常用消息总线对比
在工程中引用
Via Gradle:
implementation 'com.jeremyliao:live-event-bus:1.5.7'
For AndroidX:
implementation 'com.jeremyliao:live-event-bus-x:1.5.7'
配置
在Application.onCreate方法中配置:
LiveEventBus
.config()
...
-
supportBroadcast
配置支持跨进程、跨APP通信,传入Context,需要在application onCreate中配置 -
lifecycleObserverAlwaysActive
配置LifecycleObserver(如Activity)接收消息的模式(默认值true):- true:整个生命周期(从onCreate到onDestroy)都可以实时收到消息
- false:**状态(Started)可以实时收到消息,非**状态(Stoped)无法实时收到消息,需等到Activity重新变成**状态,方可收到消息
-
autoClear
配置在没有Observer关联的时候是否自动清除LiveEvent以释放内存(默认值false) -
setJsonConverter
配置JsonConverter(默认使用gson) -
setLogger
配置Logger(默认使用DefaultLogger) -
enableLogger
配置是否打印日志(默认打印日志)
使用方法
以生命周期感知模式订阅消息
- observe
具有生命周期感知能力,LifecycleOwner销毁时自动取消订阅,不需要调用removeObserver
LiveEventBus
.get("key_name", String.class)
.observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
}
});
以Forever模式订阅和取消订阅消息
- observeForever
Forever模式订阅消息,需要调用removeObserver取消订阅
LiveEventBus
.get("key_name", String.class)
.observeForever(observer);
- removeObserver
取消订阅消息
LiveEventBus
.get("key_name", String.class)
.removeObserver(observer);
发送消息
- post
发送一个消息,支持前台线程、后台线程发送
LiveEventBus
.get("key_name")
.post(value);
- postDelay
延迟发送一个消息,支持前台线程、后台线程发送
LiveEventBus
.get("key_name")
.postDelay(value, 1000);
跨进程、跨APP发送消息
- broadcast
跨进程、跨APP发送消息,支持前台线程、后台线程发送。需要设置supportBroadcast
LiveEventBus
.get("key_name")
.broadcast(value);
以前台队列的形式发送跨进程消息
LiveEventBus
.get("key_name")
.broadcast(value, true);
Sticky模式
支持在订阅消息的时候设置Sticky模式,这样订阅者可以接收到之前发送的消息。
- observeSticky
以Sticky模式订阅消息,具有生命周期感知能力,LifecycleOwner销毁时自动取消订阅,不需要调用removeObserver
LiveEventBus
.get("sticky_key", String.class)
.observeSticky(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s){
}
});
- observeStickyForever
Forever模式订阅消息,需要调用removeObserver取消订阅,Sticky模式
LiveEventBus
.get("sticky_key", String.class)
.observeStickyForever(observer);
混淆规则
-dontwarn com.jeremyliao.liveeventbus.**
-keep class com.jeremyliao.liveeventbus.** { *; }
-keep class android.arch.lifecycle.** { *; }
-keep class android.arch.core.** { *; }
for androidx:
-dontwarn com.jeremyliao.liveeventbus.**
-keep class com.jeremyliao.liveeventbus.** { *; }
-keep class androidx.lifecycle.** { *; }
-keep class androidx.arch.core.** { *; }