欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android Jetpack-LiveDataBus使用

程序员文章站 2022-06-07 18:22:09
...


参考:
https://github.com/JeremyLiao/LiveEventBus

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

LiveEventBus的特点

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

常用消息总线对比

Android Jetpack-LiveDataBus使用

在工程中引用

Via Gradle:

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

For AndroidX:

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

配置

在Application.onCreate方法中配置:

LiveEventBus
        .config()
        ...
  • supportBroadcast
    配置支持跨进程、跨APP通信,传入Context,需要在application onCreate中配置

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

    • true:整个生命周期(从onCreate到onDestroy)都可以实时收到消息
    • false:**状态(Started)可以实时收到消息,非**状态(Stoped)无法实时收到消息,需等到Activity重新变成**状态,方可收到消息
  • autoClear
    配置在没有Observer关联的时候是否自动清除LiveEvent以释放内存(默认值false)

  • setJsonConverter
    配置JsonConverter(默认使用gson)

  • setLogger
    配置Logger(默认使用DefaultLogger)

  • enableLogger
    配置是否打印日志(默认打印日志)

使用方法

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

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