使用share():将最后一个值发布到新订阅者

时间:2020-06-17 08:27:34

标签: android rx-java2

@Override
public void onPause() {
    super.onPause();
    compositeDisposable.clear();
}

@Override
public void onResume() {
    super.onResume();

    Flowable<MyData> distanceFlowable = myDataProcessor.hide().onBackpressureLatest()
            .distinctUntilChanged()
            .share();

    compositeDisposable.add(distanceFlowable)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(data -> {Log.w("observer 1", data.value)});

    compositeDisposable.add(distanceFlowable)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(data -> {Log.w("observer 2", data.value)});
}

当distanceFlowable连续获得新更改时,该代码将运行良好。但是,在远距离流只有一个帖子的情况下,只有 observer 1 会得到通知。

行为如下:

  1. 发布distanceFlowable
  2. 观察者1订阅
  3. logcat打印“ observer 1:133”
  4. 观察者2订阅

我希望它的行为类似于:

  1. 发布distanceFlowable
  2. 观察者1订阅
  3. logcat打印“ observer 1:133”
  4. 观察者2订阅
  5. logcat打印“ observer 2:133”

我尝试使用ConnectedFlowable代替publish(),然后在 observer 1 observer 2 都使用connect()到流动对象已订阅。但是,即使清除了compositeDisposable并且没有人在听,它仍然在可流动的状态下发布。

解决此问题的首选方法是什么?

2 个答案:

答案 0 :(得分:1)

我错过了flowable.connect()返回一个我可以添加到Disposable的{​​{1}}的情况,因此最终在onPause中将其清除了。

答案 1 :(得分:1)

只需使用.compose(ReplayingShare.instance()); https://github.com/JakeWharton/RxReplayingShare

应该可以。