使用RxJava2实现RxBus
当我们使用RxJava2实现EventBus模式时,我们称其为RxBus.
注意:这仅作为一个例子。
那么,就让我们来看看如何使用RxJava2实现RxBus吧
首先,你得了解RxJava中有关subject的知识,为此你可以参考一下我之前有关RxJava Subject的文章。
了解RxJava Subject之后,我们便可以创建RxBus啦。
public class RxBus {
public RxBus() {
}
private PublishSubject<Object> bus = PublishSubject.create();
public void send(Object o) {
bus.onNext(o);
}
public Observable<Object> toObservable() {
return bus;
}
}
现在,我们将在我们的Application类里或其他地方创建RxBus单例,如下:
public class MyApplication extends Application {
private RxBus bus;
@Override
public void onCreate() {
super.onCreate();
bus = new RxBus();
}
public RxBus bus() {
return bus;
}
}
于是,我们可以在任何地方访问到RxBus。
我们可以在任何一个class中订阅一个事件,如下所示:
((MyApplication) getApplication())
.bus()
.toObservable()
.subscribe(new Consumer<Object>() {
@Override
public void accept(Object object) throws Exception {
if (object instanceof EventTypeOne) {
Logger.d("Event Type One Received");
} else if (object instanceof EventTypeTwo) {
Logger.d("Event Type Two Received");
}
}
});
我们可在其他任何类中或同一个类中发送一个事件。
((MyApplication) getApplication())
.bus()
.send(new EventTypeOne());
到此,我们已经使用RxJava实现啦一个EventBus,RxBus。
但是如果发生啦一些error,它将会停止。为避免这种情况可以参考下RxRelay
RxRelay:也是一个Subject,但不会调用onComplete 或 onError.
检出项目完整代码