【问题标题】:What is the purpose of using a PublishSubject to trigger a disconnect rather than just unsubscribing from a Subscription in RxAndroid?在 RxAndroid 中使用 PublishSubject 触发断开连接而不是仅仅取消订阅订阅的目的是什么?
【发布时间】:2017-11-28 18:24:33
【问题描述】:

我正在开发一个使用 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 的引用然后取消订阅有何不同?

对于这个问题的开放性,我深表歉意,但我不确定如何更好地解释它。

【问题讨论】:

    标签: java android bluetooth rx-android rxandroidble


    【解决方案1】:

    不,PublishSubject disconnectTriggerSubject 帮助早先使用此 prepareConnectionObservable() 方法构造 connectionObservable。然后作为代理将null传递给observable的onNext()方法。

    那么在这个订阅的onNext()里面:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 可以用其他东西代替disconnectTriggerSubject来触发takeUntil吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多