JeremyLiao / LiveEventBus

:mailbox_with_mail:EventBus for Android,消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP
Apache License 2.0
3.87k stars 529 forks source link
eventbus livedata livedatabus

LiveEventBus

license version version

LiveEventBus是一款Android消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP logo

为什么要用LiveEventBus

生命周期感知

常用消息总线对比

消息总线 延迟发送 有序接收消息 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:

想了解更多?请点击:全面了解Android消息总线

使用

1.8及以上版本全面迁移至maven,同时groupID变为io.github.jeremyliao,1.8以下版本保留JCenter

maven

implementation 'com.jeremyliao:live-event-bus:1.7.3'

快速开始

订阅消息

LiveEventBus
    .get("some_key", String.class)
    .observeForever(observer);

发送消息

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

通过name获取Observable
Observable<T> get(@NonNull String key, @NonNull Class<T> type)
Observable<Object> get(@NonNull String key)
通过event type获取Observable
<T extends LiveEvent> Observable<T> get(@NonNull Class<T> eventType)

消息发送

进程内发送消息
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)
以广播的形式发送一个消息

老版本文档

更多使用场景

SmartEventBus

SmartEventBus是一个Android平台的消息总线框架,这是一款非常smart的消息总线框架,能让你定制自己的消息总线。 SmartEventBus

在组件化中使用LiveEventBus

android-modular

配置

在Application.onCreate方法中配置:

LiveEventBus
        .config()
        ...

更多配置信息,请点击:LiveEventBus的配置

混淆规则

-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.** { *; }

常见问题Q&A

Issues上最经常被提问的问题

若问题不能解决,请提issue。

其他分支版本

AndroidX

classic

v2

示例和DEMO

文档

实现原理

质量

版本

版本 功能
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 初版,支持基本功能

主要功能提交记录

  1. 主要功能完成(Jul 11, 2018)
  2. 支持Sticky(Aug 8, 2018)
  3. 修复在后台线程PostValue会丢失消息的问题(Aug 9, 2018)
  4. 解决发送给Stop状态Observer消息无法及时收到的问题(Aug 18, 2018)
  5. 解决了Resumed状态的Activity发生订阅,订阅者会收到订阅之前发布的消息的问题。特别感谢@MelonWXD发现了这个问题(Dec 8,2018)
  6. 在removeObserver的时候,检查livedata上有没有observer,没有则删除这个livadata,以减少内存占用。特别感谢@GreenhairTurtle提供的解决方案(Dec 27,2018)
  7. 支持设置LifecycleObserver接收消息的模式,支持在整个生命周期实时接收消息和只在激活态实时接收消息两种模式(Jan 22,2019)
  8. 支持AndroidX(Mar 8,2019)
  9. 支持跨进程、跨APP(Mar 26,2019)
  10. 简化对外暴露的接口,重构核心实现,支持前后台线程调用(Apr 4,2019)

其他

More Open Source by JeremyLiao

  1. InterfaceLoader 史上最好用的Android跨进程接口调用框架件
  2. FastSharedPreferences 一个Android平台的高性能key-value组件
  3. SmartEventBus SmartEventBus是一个Android平台的消息总线框架,这是一款非常smart的消息总线框架,能让你定制自己的消息总线。
  4. android-modular 一套Android组件化的实施方案和支撑框架
  5. DataLoader 一个Android异步数据加载框架,用于Activity打开之前预加载数据,页面启动速度优化利器

更多,请点击

深入学习Android系列,让你精通Android

Flutter系列

招聘|抖音成都招聘|有兴趣的同学可以点进去看一下,谢谢