使用PublishSubject触发断开连接的目的是什么,而不仅仅是从Rxandroid中的订阅中取消订阅



我正在研究一个使用Rxandroidble进行蓝牙通信的蓝牙项目。我遇到了两种清理订阅的方式。我想知道是否有人可以解释每个人的差异和好处。两个示例如下。

首先:使用PublishSubject与蓝牙设备触发断开连接

代码示例:https://github.com/polidea/rxandroidble/blob/master/sample/src/src/main/java/java/java/com/com/polidea/polidea/rxandroidble/sample/sample/example4_characteristic/characteristic/characteristic/characteristicoperationsexampleactivity.java p>第二:通过从Subscription

中取消订阅,与蓝牙设备断开连接

代码样本:https://github.com/polidea/rxandroidble/blob/master/sample/src/src/main/java/java/java/com/com/polidea/rxandroidble/sample/sample/example2_connection/connection exnection exmpleactivity.java

我的主要重点是每个示例中的triggerDisconnect()方法。PublishSubject的方式不同于仅保留对Subscription然后取消订阅的参考?

我对这个问题的结局有多歉,但我不确定如何更好地解释它。

no,PublishSubject disconnectTriggerSubject较早使用此prepareConnectionObservable()方法来帮助构建connectionObservable。然后充当将null传递到可观察的onNext()方法的代理。

然后在此订阅的onNext()内部:

.subscribe(
      characteristic -> {
           updateUI(characteristic);
           Log.i(getClass().getSimpleName(), "Hey, connection has been established!");
      },
      this::onConnectionFailure,
      this::onConnectionFinished
);

使用null值来调用updateUI(characteristic)方法。

我想我已经弄清楚了。.takeUntil(disconnectTriggerSubject)是了解disconnectTriggerSubject的关键。takeUntil()意味着从连接可观察到的项目(当然是在订阅之后)将发出,直到从disconnectTriggerSubject发出项目为止。由于disconnectTriggerSubjectPublishSubject,它既是观察者又是可观察的。由于它是可观察的,因此可以通过onNext()方法散发项目。因此,调用disconnectTriggerSubject.onNext(null)会导致takeUntil(disconnectTriggerSubject)执行,这阻止了要发射connectionObservable中的任何新项目。这与取消订阅本质上是相同的,因为它"停止收到此订阅后注册的订户的通知"。http://reactivex.io/rxjava/javadoc/rx/subscription.html

相关内容

最新更新