LiveDataBus

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

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

简单之美

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

分支介绍

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

主要功能 Commit 记录

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

如何使用本项目

依赖

依赖 Android Architecture Components,具体可参见 gradle 文件build.gradle

调用方式

订阅消息

  • 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,解决了发送给 Stop 状态 Observer 消息无法及时收到的问题(请切换至 live-event 分支)

close all close all

简单的 Demo 可参见:LiveDataBusDemo.java

文档

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. MessageBus 一个 android 平台的基于订阅-发布模式的消息框架,支持跨进程消息通信
  3. persistence 一个 android 平台的 key-value storage framework
  4. LightRxAndroid 另辟蹊径,利用 Android Handler 实现了一个类似 RxJava 的链式框架
  5. rxjava-retry 封装了几个处理 RxJava Retry 操作的类
Support Me
Apps
About Me
Google+: Trinea trinea
GitHub: Trinea