超好用的RxBus库

来源:互联网 发布:内裤品牌 知乎 编辑:程序博客网 时间:2024/05/18 03:54

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) {    }