LiveDataBus

Introduction: Android 消息总线,基于 LiveData,具有生命周期感知能力
More: Author   ReportBugs   
Tags:

Android 消息总线,基于 LiveData,具有生命周期感知能力,支持 Sticky

简单之美

LiveEventBus的整个实现就一个 java 文件,不超过 150 行代码。不需要过于繁杂的功能,简单好用,就是最好的:)

LiveEventBus 的两种实现

live-event-bus

  • [x] 采用继承 LiveData 的方式实现,整个实现就一个 java 文件
  • [x] 生命周期感知,消息随时订阅,自动取消订阅
  • [x] 支持 Sticky 粘性消息
  • [x] 非激活状态的 Observer(如后台的 Activity),可以在 Observer 的状态变成激活(如后台的 Activity 回到前台)时收到消息

    live-event-bus-v2

  • [x] 采用修改 LiveData 源码的方式实现
  • [x] 生命周期感知,消息随时订阅,自动取消订阅
  • [x] 支持 Sticky 粘性消息
  • [x] 非激活状态的 Observer(例如后台的 Activity),也可以立刻收到消息

如何使用本项目

  • Fork 本项目
  • 使用live-event-bus的 LiveEventBus 实现可以直接使用源码:LiveEventBus,依赖 Android Architecture Components 的 LiveData 组件
  • 使用live-event-bus-v2的 LiveEventBus 实现也依赖 Android Architecture Components 的 LiveData 组件,并且需要在 build.gradle 中引用 JCenter 库:
implementation 'com.jeremyliao:live-event-bus:1.0.0'

调用方式

订阅消息

  • 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);
    

    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);

示例和 DEMO

  • [x] 发送、接收消息
  • [x] Sticky 模式

基本功能 sticky

  • [x] 任何时候都可以订阅消息
  • [x] 一个简单的应用场景,发消息关闭所有 Activity

register close all

  • [x] 快速 postValue 也不会丢失消息
  • [x] live-event-bus-v2发送一个消息给后台 Activity,可以立刻收到消息

postvalue v2

文档

LiveEventBus 实现原理

LiveEventBus 的实现原理可参见作者在美团技术博客上的博文: Android 消息总线的演进之路:用 LiveDataBus 替代 RxBus、EventBus

质量

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

主要功能 Commit 记录

  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)

其他

  • 欢迎提 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 数据的工具
Support Me
Apps
About Me
Google+: Trinea trinea
GitHub: Trinea