一、前言:
LiveEventBus是一款Android消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP。
为什么要用LiveEventBus?
1、生命周期感知
消息随时订阅,自动取消订阅告别消息总线造成的内存泄漏告别生命周期造成的崩溃
2、范围全覆盖的消息总线解决方案
进程内消息发送App内,跨进程消息发送App之间的消息发送
3、 更多特性支持
免配置直接使用,懒人最爱支持Sticky粘性消息支持AndroidX支持延迟发送观察者的多种接收模式(全生命周期/激活状态可接受消息)
4、 常用消息总线对比
消息总线延迟发送有序接收消息Sticky生命周期感知跨进程/APP线程分发EventBus❌✅✅❌❌✅RxBus❌❌✅❌❌✅LiveEventBus✅✅✅✅✅❌
想了解更多?请点击:全面了解Android消息总线
demo下载:https://github.com/JeremyLiao/LiveEventBus.git
二、使用:
1、依赖:
Via Gradle:
implementation 'com.jeremyliao:live-event-bus:1.7.2'
For AndroidX:
implementation 'com.jeremyliao:live-event-bus-x:1.7.2'
2、订阅消息
以生命周期感知模式订阅消息
LiveEventBus
.get("some_key", String.class)
.observe(this, new Observer
@Override
public void onChanged(@Nullable String s) {
}
});
以Forever模式订阅消息
LiveEventBus
.get("some_key", String.class)
.observeForever(observer);
3、发送消息
不定义消息直接发送
LiveEventBus
.get("some_key")
.post(some_value);
先定义消息,再发送消息
//定义类型
public class DemoEvent implements LiveEvent {
public final String content;
public DemoEvent(String content) {
this.content = content;
}
}
//发送消息
LiveEventBus
.get(DemoEvent.class)
.post(new DemoEvent("Hello world"));
4、在Application.onCreate方法中配置:
LiveEventBus
.config()
.autoClear(true)
.lifecycleObserverAlwaysActive(true);
lifecycleObserverAlwaysActive 配置LifecycleObserver(如Activity)接收消息的模式(默认值true): true:整个生命周期(从onCreate到onDestroy)都可以实时收到消息 false:激活状态(Started)可以实时收到消息,非激活状态(Stoped)无法实时收到消息,需等到Activity重新变成激活状态,方可收到消息
autoClear 配置在没有Observer关联的时候是否自动清除LiveEvent以释放内存(默认值false)
setJsonConverter 配置JsonConverter(默认使用gson)
setLogger 配置Logger(默认使用DefaultLogger)
enableLogger 配置是否打印日志(默认打印日志)
setContext 如果广播模式有问题,请手动传入Context,需要在application onCreate中配置
三、详细使用文档
1、 获取Observable
通过name获取Observable
Observable
Observable
通过event type获取Observable
2、 消息发送
进程内发送消息
void post(T value)
App内发送消息,跨进程使用
void postAcrossProcess(T value)
App之间发送消息
void postAcrossApp(T value)
进程内发送消息,延迟发送
void postDelay(T value, long delay)
进程内发送消息,延迟发送,带生命周期
void postDelay(LifecycleOwner sender, T value, long delay)
进程内发送消息,有序发送
void postOrderly(T value)
以广播的形式发送一个消息
需要跨进程、跨APP发送消息的时候调用该方法建议尽量使用postAcrossProcess、postAcrossApp
void broadcast(T value, boolean foreground, boolean onlyInApp)
3、 消息订阅
以生命周期感知模式订阅消息
具有生命周期感知能力,LifecycleOwner销毁时自动取消订阅,不需要调用removeObserver
void observe(@NonNull LifecycleOwner owner, @NonNull Observer
以Forever模式订阅和取消订阅消息
Forever模式订阅消息,需要调用removeObserver取消订阅
void observeForever(@NonNull Observer
取消订阅消息
void removeObserver(@NonNull Observer
Sticky模式订阅消息
Sticky模式支持在订阅消息的时候设置Sticky模式,这样订阅者可以接收到之前发送的消息。以Sticky模式订阅消息,具有生命周期感知能力,LifecycleOwner销毁时自动取消订阅,不需要调用removeObserver
void observeSticky(@NonNull LifecycleOwner owner, @NonNull Observer
Sticky模式Forever订阅消息
Forever模式订阅消息,需要调用removeObserver取消订阅,Sticky模式
void observeStickyForever(@NonNull Observer
4、 跨进程消息
支持对基本数据类型消息的跨进程发送
intfloatlongbooleandoubleString
支持Serializable和Parcelable类型消息的跨进程发送
提供SerializableProcessor提供ParcelableProcessor
支持Bean类型消息的跨进程发送
提供GsonProcessor以Gson方式提供支持需要用注解@IpcConfig指定GsonProcessor:
@IpcConfig(processor = GsonProcessor.class)
支持自定义扩展
实现自定义Processor,实现Processor接口用注解@IpcConfig指定自定义Processor
5、 配置
在Application.onCreate方法中配置:
LiveEventBus
.config()
...
lifecycleObserverAlwaysActive 配置LifecycleObserver(如Activity)接收消息的模式(默认值true)
autoClear 配置在没有Observer关联的时候是否自动清除LiveEvent以释放内存(默认值false)
更多配置信息,请点击:LiveEventBus的配置
6、混淆规则
-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.** { *; }
作者:因为我的心 链接:https://www.jianshu.com/p/6df10c681f78 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。