超好用的RxBus库
程序员文章站
2022-05-26 17:56:03
...
RxBus工具类
具体请参考Github.
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) {
}