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

超好用的RxBus库

程序员文章站 2022-05-26 17:56:03
...

RxBus工具类

具体请参考Github.

1、该项目基于RxJava2 & RxAndroid

2、通过@RxBusSubscribe注解方法来接收消息,其中可以设置标签组、线程(默认接收消息在主线程)、Sticky标记。

3、可以发送普通消息和Sticky消息。

4、自动防重复注册宿主(这里指任何一个类)、自动防重复注册标签(及同一个宿主下的标签不重复,如果重复了,只有第一次有效。)。

5、支持背压,采用的策略是BackpressureStrategy.DROP。

使用方法:

1、引用

在Project的gradle中加入:

    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

在Module的gradle中加入:

    dependencies {
        compile 'com.github.like5188:RxBus:2.0.1'
        annotationProcessor 'com.github.like5188.RxBus:rxbus-compiler:2.0.1' // java
        // kapt 'com.github.like5188.RxBus:rxbus-compiler:2.0.1' // kotlin
    }

2、在需要接收消息的类的初始化方法(通常为构造函数)中调用register(this)方法进行注册宿主(通常在Activity的onCreate()方法中调用,也可以是其它任何类)。当在父类调用register(this)方法后,在子类无需再调用了,调用了也行,会自动防重复注册宿主。

    RxBus.register(this);

3、在销毁宿主的实例时调用unregister(this)方法进行取消注册宿主(通常在Activity的onDestroy()方法中调用)。

    RxBus.unregister(this);

4、发送普通消息可以使用post()、postByTag()方法。

    RxBus.post();
    RxBus.post(object);
    RxBus.post("tag", object);
    RxBus.postByTag("tag");

5、发送Sticky消息使用postSticky()方法,注意Sticky消息在第一次接收后,就和普通消息一样了。和发送普通消息相比,实际上就是延迟了第一次接收消息的时间(用来替代Intent传递数据)。

    RxBus.postSticky(object);
    RxBus.postSticky("tag", object);

6、接收消息和发送消息是一一对应的。使用@RxBusSubscribe注解一个方法,被注解的方法的参数最多只能是1个。只能被public修饰,且不能被static修饰(即只能使用public void修饰)。其中可以设置标签组、线程(RxBusThread)、Sticky标记。

    默认标签,无参

    发送消息:
    RxBus.post();

    接收消息:
    @RxBusSubscribe()
    public void test() {
    }

    // kotlin版本
    @RxBusSubscribe()
    fun test() {
    }
    默认标签,有参

    发送消息:
    RxBus.post(123);

    接收消息:
    @RxBusSubscribe()
    public void test(int data) {
    }
    自定义标签,无参

    发送消息:
    RxBus.postByTag("tag");

    接收消息:
    @RxBusSubscribe("tag")
    public void test() {
    }
    自定义标签,有参

    发送消息:
    RxBus.post("tag", 123);

    接收消息:
    @RxBusSubscribe("tag")
    public void test(int data) {
    }
    自定义标签数组,有参

    发送消息:
    RxBus.post("tag1", "1");
    RxBus.post("tag2", "2");

    接收消息:
    @RxBusSubscribe(value = {"tag1", "tag2"})
    public void test(String data) {
    }
    自定义标签,有参

    发送Sticky消息:
    RxBus.postSticky("tag", "1");

    接收Sticky消息:
    @RxBusSubscribe(value = "tag", isSticky = true, thread = RxBusThread.IO)
    public void test(String data) {
    }
    默认标签,有参

    发送Sticky消息:
    RxBus.postSticky("1");

    接收Sticky消息:
    @RxBusSubscribe(isSticky = true)
    public void test(String data) {
    }