RX子可观察-仅执行一次

pro*_*m85 4 android observable rx-java

通常我用

Observable observable = someObservable.replay().refCount();
Run Code Online (Sandbox Code Playgroud)

创建一个只能执行一次的可观察对象。如果我observable多次订阅,则效果很好:

observable.observeOn(Schedulers.io())
    .subscribeOn(AndroidSchedulers.mainThread())
    .subscribe(...);

observable.observeOn(Schedulers.io())
    .subscribeOn(AndroidSchedulers.mainThread())
    .subscribe(...);
Run Code Online (Sandbox Code Playgroud)

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(...);
Run Code Online (Sandbox Code Playgroud)

然后observable执行两次。我如何确保不会发生这种情况?

Fri*_*ail 6

我认为您想要添加一个.take(1)运算符。这样,一旦从可观察对象读取了某些内容,它将调用onComplete。

  • 啊我明白了,你可以使用 .cache() 操作符。这样,第一次执行将创建可观察对象,而任何其他订阅者将获得完全相同的缓存排放。将 .cache 视为为您维护状态。 (2认同)