RxJava实现的EventBus-RxBus

使用RxJava2实现RxBus

当我们使用RxJava2实现EventBus模式时,我们称其为RxBus.
注意:这仅作为一个例子。

那么,就让我们来看看如何使用RxJava2实现RxBus吧

首先,你得了解RxJava中有关subject的知识,为此你可以参考一下我之前有关RxJava Subject的文章。
了解RxJava Subject之后,我们便可以创建RxBus啦。

public class RxBus {

    public RxBus() {
    }

    private PublishSubject bus = PublishSubject.create();

    public void send(Object o) {
        bus.onNext(o);
    }

    public Observable 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() {
            @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.
检出项目完整代码


翻译自:Implementing EventBus With RxJava — RxBus

你可能感兴趣的:(RxJava实现的EventBus-RxBus)