使用第一版RxJava
和RxAndroid
我跟class
作为EventBus
:
public class RxBus {
private static RxBus instance;
private PublishSubject<Object> subject = PublishSubject.create();
public static RxBus instanceOf() {
if (instance == null) {
instance = new RxBus();
}
return instance;
}
public void setMessage(Object object) {
subject.onNext(object);
}
public Observable<Object> getEvents() {
return subject;
}
}
通过instanceOf
在任何类中获取实例我使用setMessage
方法发出消息并使用代码来获取发出的消息:
bus.getEvents().subscribe(new Action1<Object>() {
@Override
public void call(Object o) {
if (o instanceof String) {
//TODO
}
}
});
Action1
来自rx.functions
个套餐。尝试迁移使用RxJava 2
我无法导入它。
请告诉我,使用RxJava 2
作为EventBus
答案 0 :(得分:6)
在RxJava2中,Action1
已重命名为Consumer
。
其余的操作接口是根据Java 8功能类型命名的。无参数
Action0
将替换为运算符的io.reactivex.functions.Action
和java.lang.Runnable
方法的Scheduler
。Action1
已重命名为Consumer
,Action2
被称为BiConsumer
。ActionN
被Consumer<Object[]>
类型声明替换。
答案 1 :(得分:0)
这是RxJava2中事件总线的一个很好的实现(代码是从这个gist复制的)
import io.reactivex.Observable;
import io.reactivex.subjects.PublishSubject;
public class RxBus {
private static volatile RxBus sRxBus = null;
private PublishSubject<Object> mPublishSubject = PublishSubject.create();
private RxBus() {
}
public static RxBus getInstance() {
if (sRxBus == null) {
synchronized (RxBus.class) {
if (sRxBus == null) {
sRxBus = new RxBus();
}
}
}
return sRxBus;
}
public <T> Observable<T> subscribe(Class<T> cls) {
return mPublishSubject
.filter(o -> o.getClass().equals(cls))
.map(o -> (T) o);
}
public void post(Object obj) {
mPublishSubject.onNext(obj);
}
}