Skip to content
📬EventBus for Android,消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP
Branch: master
Clone or download
Latest commit 45f2d63 Mar 26, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
branchs
images update images Mar 7, 2019
live-event-bus 重新思考了一下pr#25的问题,不做过滤处理 Mar 26, 2019
.gitignore 更新.gitignore Sep 26, 2018
DEMO.md
LICENSE
README.md

README.md

LiveEventBus

license version

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

logo

LiveEventBus的特点

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

在工程中引用

Via Gradle:

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

For AndroidX:

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

配置

在Application.onCreate方法中配置:

LiveEventBus.get()
        .config()
        .supportBroadcast(this)
        .lifecycleObserverAlwaysActive(true);
  • supportBroadcast

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

  • lifecycleObserverAlwaysActive

配置LifecycleObserver(如Activity)接收消息的模式:

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

调用方式

订阅消息

  • observe 生命周期感知,不需要手动取消订阅
LiveEventBus.get()
	.with("key_name", String.class)
	.observe(this, new Observer<String>() {
	    @Override
	    public void onChanged(@Nullable String s) {
	    }
	});
  • observeForever 需要手动取消订阅
LiveEventBus.get()
	.with("key_name", String.class)
	.observeForever(observer);
LiveEventBus.get()
	.with("key_name", String.class)
	.removeObserver(observer);

发送消息

  • setValue 在主线程发送消息
LiveEventBus.get().with("key_name").setValue(value);
  • postValue 在后台线程发送消息,订阅者会在主线程收到消息
LiveEventBus.get().with("key_name").postValue(value);

跨进程、跨APP发送消息

  • broadcastValue
LiveEventBus.get()
        .with(KEY_TEST_BROADCAST)
        .broadcastValue("broadcast msg");

需要设置supportBroadcast

Sticky模式

支持在注册订阅者的时候设置Sticky模式,这样订阅者可以接收到订阅之前发送的消息

  • observeSticky 生命周期感知,不需要手动取消订阅,Sticky模式
LiveEventBus.get()
        .with("sticky_key", String.class)
        .observeSticky(this, new Observer<String>() {
            @Override
            public void onChanged(@Nullable String s){
            }
        });
  • observeStickyForever 需要手动取消订阅,Sticky模式
LiveEventBus.get()
        .with("sticky_key", String.class)
        .observeStickyForever(observer);
LiveEventBus.get()
        .with("sticky_key", String.class)
        .removeObserver(observer);

混淆规则

-dontwarn com.jeremyliao.liveeventbus.**
-keep class com.jeremyliao.liveeventbus.LiveEventBus { *; }
-keep class android.arch.lifecycle.ExternalLiveData { *; }

其他分支版本

AndroidX

  • 支持AndroidX
  • 同master版本一致

classic

  • 经典实现版,整个实现就一个java文件
  • 只支持激活状态(Started)可以实时收到消息,非激活状态(Stoped)无法实时收到消息,需等到Activity重新变成激活状态,方可收到消息
  • 不支持跨进程通信

v2

  • v2版,历史版本,已废弃
  • 为了解决非激活态不能实时收到消息的问题,采用修改LiveData源码的方式实现

示例和DEMO

文档

实现原理

质量

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

版本

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

其他

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

新框架:invoking-message 🆕

invoking-message是我近期开发的消息总线框架,基于当前项目LiveEventBus实现。它颠覆了传统消息总线定义和使用的方式,通过链式的方法调用发送和接收消息,使用更简单。推荐大家使用,也欢迎大家Star: invoking-message

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实现。它颠覆了传统消息总线定义和使用的方式,通过链式的方法调用发送和接收消息,使用更简单
You can’t perform that action at this time.