LiveDataBus

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

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

简单之美

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

LiveDataBus 不同的实现

LiveDataBus 目前有两种实现:

  • live-data-bus 采用继承 LiveData 的方式实现,整个实现就一个 java 文件
  • live-event-bus 由于 live-data-bus 的实现存在发送给 Stop 状态 Observer 消息无法及时收到的问题,这个问题采用继承 LiveData 的方式无法解决,所以把 LiveData 源码拷贝并命名成 LiveEvent 类,直接修改解决,并且也解决了 live-data-bus 需要 hook 的问题

主要功能 Commit 记录

  1. 主要功能完成(Jul 11, 2018)
  2. 支持 Sticky(Aug 8, 2018)
  3. 修复在后台线程 PostValue 会丢失消息的问题(Aug 9, 2018)
  4. 新建分支 live-event,解决发送给 Stop 状态 Observer 消息无法及时收到的问题(Aug 18, 2018)
  5. 两种实现合并到 master 分支(Sep 26, 2018)

如何使用本项目

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

调用方式

订阅消息

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

        }
    });
  • observeForever 需要手动取消订阅
LiveDataBus.get()
    .with("key_name", String.class)
    .observeForever(observer);
LiveDataBus.get()
    .with("key_name", String.class)
    .removeObserver(observer);

发送消息

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

    LiveDataBus.get().with("key_name").postValue(value);
    

    Sticky 模式

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

  • observeSticky 生命周期感知,不需要手动取消订阅,Sticky 模式

LiveDataBus.get()
        .with("sticky_key", String.class)
        .observeSticky(this, new Observer<String>() {
            @Override
            public void onChanged(@Nullable String s) {

            }
        });
  • observeStickyForever 需要手动取消订阅,Sticky 模式
LiveDataBus.get()
        .with("sticky_key", String.class)
        .observeStickyForever(observer);
LiveDataBus.get()
        .with("sticky_key", String.class)
        .removeObserver(observer);

示例和 DEMO

基本功能

基本功能

Sticky 模式

sticky

一个简单的应用,发消息关闭所有 activity

close all

live-event-bus,解决了发送给 Stop 状态 Observer 消息无法及时收到的问题

close all close all

文档

LiveDataBus 实现原理

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

其他

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

More Open Source by JeremyLiao

  1. tensorflow-lite-sdk 一个更加通用的 Tensorflow-Lite Android SDK
  2. android-modular 一个组件化的实施方案
  3. MessageBus 一个 android 平台的基于订阅-发布模式的消息框架,支持跨进程消息通信
  4. persistence 一个 android 平台的 key-value storage framework
  5. LightRxAndroid 另辟蹊径,利用 Android Handler 实现了一个类似 RxJava 的链式框架
  6. rxjava-retry 封装了几个处理 RxJava Retry 操作的类
Support Me
Apps
About Me
Google+: Trinea trinea
GitHub: Trinea