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

时间:2017-11-28 18:24:33

标签: java android bluetooth rx-android

我正在开发一个使用RxAndroidBle进行蓝牙通信的蓝牙项目。我遇到了两种不同的方式来清理订阅。我想知道是否有人可以解释每个人的差异和好处,如果有的话。这两个例子如下。

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

代码示例:https://github.com/Polidea/RxAndroidBle/blob/master/sample/src/main/java/com/polidea/rxandroidble/sample/example4_characteristic/CharacteristicOperationExampleActivity.java

第二:通过取消订阅Subscription

与蓝牙设备断开连接

代码示例: https://github.com/Polidea/RxAndroidBle/blob/master/sample/src/main/java/com/polidea/rxandroidble/sample/example2_connection/ConnectionExampleActivity.java

我主要关注每个示例中的triggerDisconnect()方法。 PublishSubject方式在哪些方面不同于仅仅保留对Subscription的引用然后取消订阅?

我为这个问题的开放性而道歉,但我不确定如何更好地解释它。

2 个答案:

答案 0 :(得分:0)

不,PublishSubject disconnectTriggerSubject之前使用此connectionObservable方法帮助构建prepareConnectionObservable()。然后充当代理,将null方法传递给onNext()方法。

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

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

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

答案 1 :(得分:0)

我想我明白了。 .takeUntil(disconnectTriggerSubject)是理解disconnectTriggerSubject的关键。 takeUntil()表示从disconnectTriggerSubject发出项目之前,将发出从连接可观察的项目(在订阅之后)发出的项目。由于disconnectTriggerSubjectPublishSubject,因此它既是观察者又是观察者。由于它是一个可观察的,它可以通过onNext()方法发出项目。因此,调用disconnectTriggerSubject.onNext(null)会导致takeUntil(disconnectTriggerSubject)执行,这会阻止connectionObservable中的任何新项目被发出。这与取消订阅基本相同,因为它"停止在收到此订阅时注册的订阅者收到通知。" http://reactivex.io/RxJava/javadoc/rx/Subscription.html