LiveEventBus的使用

作者: i小灰 | 来源:发表于2020-12-02 14:23 被阅读0次

    一、前言:

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

    为什么要用LiveEventBus?

    1、生命周期感知
    • 消息随时订阅,自动取消订阅
    • 告别消息总线造成的内存泄漏
    • 告别生命周期造成的崩溃
    2、范围全覆盖的消息总线解决方案
    • 进程内消息发送
    • App内,跨进程消息发送
    • App之间的消息发送
    3、 更多特性支持
    • 免配置直接使用,懒人最爱
    • 支持Sticky粘性消息
    • 支持AndroidX
    • 支持延迟发送
    • 观察者的多种接收模式(全生命周期/激活状态可接受消息)

    4、 常用消息总线对比
    消息总线 延迟发送 有序接收消息 Sticky 生命周期感知 跨进程/APP 线程分发
    EventBus
    RxBus
    LiveEventBus

    想了解更多?请点击:全面了解Android消息总线

    demo下载:https://github.com/JeremyLiao/LiveEventBus.git

    二、使用:

    1、依赖:

    Via Gradle:

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

    For AndroidX:

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

    2、订阅消息

    • 以生命周期感知模式订阅消息
    LiveEventBus
        .get("some_key", String.class)
        .observe(this, new Observer<String>() {
            @Override
            public void onChanged(@Nullable String s) {
            }
        });
    
    
    • 以Forever模式订阅消息
    LiveEventBus
        .get("some_key", String.class)
        .observeForever(observer);
    
    

    3、发送消息

    • 不定义消息直接发送
    LiveEventBus
        .get("some_key")
        .post(some_value);
    
    
    • 先定义消息,再发送消息
    //定义类型
    public class DemoEvent implements LiveEvent {
        public final String content;
    
        public DemoEvent(String content) {
            this.content = content;
        }
    }
    //发送消息
    LiveEventBus
            .get(DemoEvent.class)
            .post(new DemoEvent("Hello world"));
    
    

    4、在Application.onCreate方法中配置:

      LiveEventBus
                 .config()
                 .autoClear(true)
                 .lifecycleObserverAlwaysActive(true);
    
    
    • lifecycleObserverAlwaysActive
      配置LifecycleObserver(如Activity)接收消息的模式(默认值true):
      true:整个生命周期(从onCreate到onDestroy)都可以实时收到消息
      false:激活状态(Started)可以实时收到消息,非激活状态(Stoped)无法实时收到消息,需等到Activity重新变成激活状态,方可收到消息

    • autoClear
      配置在没有Observer关联的时候是否自动清除LiveEvent以释放内存(默认值false)

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

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

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

    • setContext
      如果广播模式有问题,请手动传入Context,需要在application onCreate中配置

    三、详细使用文档

    1、 获取Observable

    • 通过name获取Observable
    Observable<T> get(@NonNull String key, @NonNull Class<T> type)
    
    Observable<Object> get(@NonNull String key)
    
    
    • 通过event type获取Observable
    <T extends LiveEvent> Observable<T> get(@NonNull Class<T> eventType)
    
    

    2、 消息发送

    进程内发送消息
    void post(T value)
    
    
    App内发送消息,跨进程使用
    void postAcrossProcess(T value)
    
    
    App之间发送消息
    void postAcrossApp(T value)
    
    
    进程内发送消息,延迟发送
    void postDelay(T value, long delay)
    
    
    进程内发送消息,延迟发送,带生命周期
    void postDelay(LifecycleOwner sender, T value, long delay)
    
    
    进程内发送消息,有序发送
    void postOrderly(T value)
    
    
    以广播的形式发送一个消息
    • 需要跨进程、跨APP发送消息的时候调用该方法
    • 建议尽量使用postAcrossProcess、postAcrossApp
    void broadcast(T value, boolean foreground, boolean onlyInApp)
    
    

    3、 消息订阅

    以生命周期感知模式订阅消息
    • 具有生命周期感知能力,LifecycleOwner销毁时自动取消订阅,不需要调用removeObserver
    void observe(@NonNull LifecycleOwner owner, @NonNull Observer<T> observer)
    
    
    以Forever模式订阅和取消订阅消息
    • Forever模式订阅消息,需要调用removeObserver取消订阅
    void observeForever(@NonNull Observer<T> observer)
    
    
    取消订阅消息
    void removeObserver(@NonNull Observer<T> observer)
    
    
    Sticky模式订阅消息
    • Sticky模式
    • 支持在订阅消息的时候设置Sticky模式,这样订阅者可以接收到之前发送的消息。
    • 以Sticky模式订阅消息,具有生命周期感知能力,LifecycleOwner销毁时自动取消订阅,不需要调用removeObserver
    void observeSticky(@NonNull LifecycleOwner owner, @NonNull Observer<T> observer)
    
    
    Sticky模式Forever订阅消息
    • Forever模式订阅消息,需要调用removeObserver取消订阅,Sticky模式
    void observeStickyForever(@NonNull Observer<T> observer)
    
    

    4、 跨进程消息

    支持对基本数据类型消息的跨进程发送
    1. int
    2. float
    3. long
    4. boolean
    5. double
    6. String
    支持Serializable和Parcelable类型消息的跨进程发送
    • 提供SerializableProcessor
    • 提供ParcelableProcessor
    支持Bean类型消息的跨进程发送
    • 提供GsonProcessor以Gson方式提供支持
    • 需要用注解@IpcConfig指定GsonProcessor:
    @IpcConfig(processor = GsonProcessor.class)
    
    
    支持自定义扩展
    • 实现自定义Processor,实现Processor接口
    • 用注解@IpcConfig指定自定义Processor

    5、 配置

    在Application.onCreate方法中配置:

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

    • autoClear 配置在没有Observer关联的时候是否自动清除LiveEvent以释放内存(默认值false)

    更多配置信息,请点击:LiveEventBus的配置

    6、混淆规则

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

    参考:LiveEventBus

    相关文章

      网友评论

        本文标题:LiveEventBus的使用

        本文链接:https://www.haomeiwen.com/subject/xpnoiktx.html