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

问题描述 投票:1回答:1
@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连续获得新更改时,该代码运行良好。但是,在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并且没有人在听,它仍然在可流动状态下发布。

解决此问题的首选方法是什么?
android rx-java2
1个回答
1
投票
[我错过了flowable.connect()返回我可以添加到DisposablecompositeDisposable,这样最终在onPause中将其清除了。
© www.soinside.com 2019 - 2024. All rights reserved.