在RxJava中创建等效的ConnectableSubject

时间:2015-06-29 22:31:16

标签: rx-java

我需要在RxJava中创建一个ConnectableSubject的等价物。我希望在任何订阅之前将事件发布到主题,并且我希望订阅者获得所有事件。我不想使用ReplaySubject来缓存这些事件,因为我不希望它们在被消耗后保留在内存中。

理想情况下,此代码可以使用,但第一个事件会丢失。

PublishSubject<String> subject = PublishSubject.create();
ConnectableObservable<String> observable = subject.publish();

subject.onNext("1");
observable.subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        System.out.println("string is " + s);
    }
});
observable.connect();
subject.onNext("2");
subject.onNext("3");

此代码的输出是

string is 2
string is 3

理想情况下应该是

string is 1
string is 2
string is 3

1 个答案:

答案 0 :(得分:1)

publish()上呼叫PublishSubject在功能上是无操作。您最需要的是内部BufferUntilSubscriber,它会缓冲事件,直到单个Subscriber订阅它为止。但是,它不支持背压或多个Subscriber,因此您可能仍需要使用publish()onBackpressureBuffer()