Обычно я используюRX суб наблюдаемым - выполнить только один раз
Observable observable = someObservable.replay().refCount();
для создания наблюдаемого, который выполняется только один раз. Это прекрасно работает, если я подписаться на observable
несколько раз, как следующее:
observable.observeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(...);
observable.observeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(...);
observable
выполняется только один раз - совершенны, как я хочу. Если я теперь сделать следующее:
Observable obs1 = observable.map(...); // call some operators
Observable obs2 = observable.map(...); // call some operators
obs1.observeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(...);
obs2.observeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(...);
Затем observable
выполняется дважды. Как я могу убедиться, что этого не произойдет?
Я хочу воспроизвести всю последовательность ... Я не хочу ничего потерять. Все n элементов, излучаемых моим наблюдаемым, должны испускаться любому абоненту или любой цепочке, наблюдаемый используется в – prom85
ах. Я понимаю, вы можете использовать оператор .cache(). Таким образом, первое исполнение создаст наблюдаемое, в то время как любой другой абонент получит точно такие же кешированные выбросы. Подумайте о .cache как состоянии для вас. – FriendlyMikhail
это работает. Я все еще смущен, почему 'refCount' не работает ... Кажется, что' refCount' работает только в том случае, если я подписываюсь на результат, наблюдаемый напрямую (я никогда не читал об этом пока что) ... Использование 'autoConnect' вместо этого работает также ... – prom85