我需要在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
答案 0 :(得分:1)
在publish()
上呼叫PublishSubject
在功能上是无操作。您最需要的是内部BufferUntilSubscriber
,它会缓冲事件,直到单个Subscriber
订阅它为止。但是,它不支持背压或多个Subscriber
,因此您可能仍需要使用publish()
或onBackpressureBuffer()
。