LiveEventBus是一款Android消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP
消息总线 | 延迟发送 | 有序接收消息 | Sticky | 生命周期感知 | 跨进程/APP | 线程分发 |
---|---|---|---|---|---|---|
EventBus | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: | :white_check_mark: |
RxBus | :x: | :x: | :white_check_mark: | :x: | :x: | :white_check_mark: |
LiveEventBus | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: |
1.8及以上版本全面迁移至maven,同时groupID变为io.github.jeremyliao,1.8以下版本保留JCenter
maven
implementation 'io.github.jeremyliao:live-event-bus:1.8.0'
implementation 'io.github.jeremyliao:live-event-bus-x:1.8.0'
implementation 'com.jeremyliao:live-event-bus:1.7.3'
implementation 'com.jeremyliao:live-event-bus-x:1.7.3'
以生命周期感知模式订阅消息
LiveEventBus
.get("some_key", String.class)
.observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
}
});
以Forever模式订阅消息
LiveEventBus
.get("some_key", String.class)
.observeForever(observer);
不定义消息直接发送
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"));
Observable<T> get(@NonNull String key, @NonNull Class<T> type)
Observable<Object> get(@NonNull String key)
<T extends LiveEvent> Observable<T> get(@NonNull Class<T> eventType)
void post(T value)
void postAcrossProcess(T value)
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)
具有生命周期感知能力,LifecycleOwner销毁时自动取消订阅,不需要调用removeObserver
void observe(@NonNull LifecycleOwner owner, @NonNull Observer<T> observer)
Forever模式订阅消息,需要调用removeObserver取消订阅
void observeForever(@NonNull Observer<T> observer)
void removeObserver(@NonNull Observer<T> observer)
Sticky模式
支持在订阅消息的时候设置Sticky模式,这样订阅者可以接收到之前发送的消息。
以Sticky模式订阅消息,具有生命周期感知能力,LifecycleOwner销毁时自动取消订阅,不需要调用removeObserver
void observeSticky(@NonNull LifecycleOwner owner, @NonNull Observer<T> observer)
Forever模式订阅消息,需要调用removeObserver取消订阅,Sticky模式
void observeStickyForever(@NonNull Observer<T> observer)
提供SerializableProcessor
提供ParcelableProcessor
提供GsonProcessor以Gson方式提供支持
需要用注解@IpcConfig指定GsonProcessor:
@IpcConfig(processor = GsonProcessor.class)
1.8及以上版本由于拆分了GsonProcessor,需要引入lebx-processor-gson
非AndroidX
implementation 'io.github.jeremyliao:leb-processor-gson:x.x.x'
AndroidX
implementation 'io.github.jeremyliao:lebx-processor-gson:x.x.x'
实现自定义Processor,实现Processor接口
用注解@IpcConfig指定自定义Processor
SmartEventBus是一个Android平台的消息总线框架,这是一款非常smart的消息总线框架,能让你定制自己的消息总线。 SmartEventBus
在Application.onCreate方法中配置:
LiveEventBus
.config()
...
lifecycleObserverAlwaysActive 配置LifecycleObserver(如Activity)接收消息的模式(默认值true)
autoClear 配置在没有Observer关联的时候是否自动清除LiveEvent以释放内存(默认值false)
-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.** { *; }
Issues上最经常被提问的问题
Q:收不到消息怎么办?
A:通过Console.getInfo()获取即时的调试信息,主要去观察对应的key下面有没有你关注的Observer(Console的用法)
*********Event info*********
Event name: key_test_delay_life
version: -1
hasActiveObservers: true
hasObservers: true
ActiveCount: 1
ObserverCount: 1
Observers:
[com.jeremyliao.liveeventbus.core.LiveEventBusCore$ObserverWrapper@992681d=android.arch.lifecycle.ExternalLiveData$ExternalLifecycleBoundObserver@bc258f4]
Q:收到重复的消息怎么办?
A:同样通过Console.getInfo()获取即时的调试信息,主要去观察有没有重复注册的Observer(Console的用法)
Q:JCenter要关闭了,什么时候迁移?
A:1.8及以上版本全面迁移至maven,同时groupID变为io.github.jeremyliao,1.8以下版本保留JCenter
Q:如何传递List
A:代码上的写法有两种,供参考:
LiveEventBus
.get(KEY_TEST_OBSERVE_FOREVER, List.class)
.observeForever(new Observer<List>() {
@Override
public void onChanged(@Nullable List list) {
List<String> stringList = list;
}
});
Observable<List<String>> observable = LiveEventBus.get(KEY_TEST_OBSERVE_FOREVER);
observable.observeForever(new Observer<List<String>>() {
@Override
public void onChanged(@Nullable List<String> strings) {
}
});
Q:项目中不用Gson库,如何去掉依赖?
A:使用1.8以上的版本,对gson相关代码进行了拆分
若问题不能解决,请提issue。
版本 | 功能 |
---|---|
1.8.x | 迁移至maven,拆分gson-converter |
1.7.x | 优化接口设计,优化实现逻辑,修复一些问题 |
1.6.x | 优化接口设计,优化实现逻辑,修复一些问题 |
1.5.x | 优化接口设计,使用起来更简洁 |
1.4.x | 简化对外暴露的接口,重构核心实现,支持前后台线程调用 |
1.3.x | 支持跨进程、跨APP通信 |
1.2.x | 支持接收消息的模式,支持AndroidX |
1.1.x | 修复了一些问题 |
1.0.x | 初版,支持基本功能 |
更多,请点击