/LiveEventBus

:mailbox_with_mail:EventBus for Android,消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP

Primary LanguageJavaApache License 2.0Apache-2.0

LiveEventBus

license version

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

logo

LiveEventBus的特点

  • 生命周期感知,消息随时订阅,自动取消订阅
  • 支持Sticky粘性消息
  • 支持AndroidX
  • 支持跨进程通信
  • 支持跨APP通信
  • 支持设置LifecycleObserver(如Activity)接收消息的模式:
  1. 整个生命周期(从onCreate到onDestroy)都可以实时收到消息
  2. 激活状态(Started)可以实时收到消息,非激活状态(Stoped)无法实时收到消息,需等到Activity重新变成激活状态,方可收到消息

常用消息总线对比

消息总线 延迟发送 有序接收消息 Sticky 生命周期感知 跨进程/APP 线程分发
EventBus
RxBus
LiveEventBus

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

在工程中引用

Via Gradle:

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

For AndroidX:

implementation 'com.jeremyliao:live-event-bus-x:1.5.0'

配置

在Application.onCreate方法中配置:

LiveEventBus
        .config()
        .supportBroadcast(this)
        .lifecycleObserverAlwaysActive(true)
        .autoClear(false);
  • supportBroadcast

配置支持跨进程、跨APP通信

  • lifecycleObserverAlwaysActive

配置LifecycleObserver(如Activity)接收消息的模式(默认值true):

  1. true:整个生命周期(从onCreate到onDestroy)都可以实时收到消息
  2. false:激活状态(Started)可以实时收到消息,非激活状态(Stoped)无法实时收到消息,需等到Activity重新变成激活状态,方可收到消息
  • autoClear

配置在没有Observer关联的时候是否自动清除LiveEvent以释放内存(默认值false)

使用方法

以生命周期感知模式订阅消息

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

其他分支版本

  • 支持AndroidX
  • 同master版本一致
  • 经典实现版,整个实现就一个java文件
  • 只支持激活状态(Started)可以实时收到消息,非激活状态(Stoped)无法实时收到消息,需等到Activity重新变成激活状态,方可收到消息
  • 不支持跨进程通信
  • v2版,历史版本,已废弃
  • 为了解决非激活态不能实时收到消息的问题,采用修改LiveData源码的方式实现

文档

实现原理

质量

  • 编写了30个测试用例以确保LiveEventBus能够正常运行。
  • 具体测试用例参见LiveEventBusTest

版本

版本 功能
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)

其他

  • 欢迎提Issue与作者交流
  • 欢迎提Pull request,帮助 fix bug,增加新的feature,让LiveEventBus变得更强大、更好用

More Open Source by JeremyLiao

  1. FastSharedPreferences 一个Android平台的高性能key-value组件
  2. tensorflow-lite-sdk 一个更加通用的Tensorflow-Lite Android SDK
  3. android-modular 一个组件化实施方案的Demo
  4. MessageBus 一个android平台的基于订阅-发布模式的消息框架,支持跨进程消息通信
  5. persistence 一个android平台的key-value storage framework
  6. LightRxAndroid 另辟蹊径,利用Android Handler实现了一个类似RxJava的链式框架
  7. rxjava-retry 封装了几个处理RxJava Retry操作的类
  8. retrofit-mock 一个用于Retrofit mock response数据的工具
  9. jacoco-android-demo AndroidStudio运行jacoco计算测试覆盖率的Demo
  10. android-gradle-study 深入浅出Android Gradle
  11. invoking-message 消息总线框架,基于LiveEventBus实现。它颠覆了传统消息总线定义和使用的方式,通过链式的方法调用发送和接收消息,使用更简单
  12. DataLoader 一个Android异步数据加载框架,用于Activity打开之前预加载数据,页面启动速度优化利器