Java 在RxAndroid中使用PublishSubject触发断开连接而不仅仅是取消订阅的目的是什么?
我正在做一个蓝牙项目,它使用RxAndroidBle进行蓝牙通信。我遇到了两种清理订阅的不同方法。我想知道是否有人能解释每种方法的区别和好处(如果有的话)。这两个例子如下 第一:使用Java 在RxAndroid中使用PublishSubject触发断开连接而不仅仅是取消订阅的目的是什么?,java,android,bluetooth,rx-android,Java,Android,Bluetooth,Rx Android,我正在做一个蓝牙项目,它使用RxAndroidBle进行蓝牙通信。我遇到了两种清理订阅的不同方法。我想知道是否有人能解释每种方法的区别和好处(如果有的话)。这两个例子如下 第一:使用PublishSubject触发与蓝牙设备的断开连接 代码示例: 第二:通过取消订阅来断开与蓝牙设备的连接 代码示例: 我主要关注的是每个示例中的triggerDisconnect()方法。PublishSubject方式与仅保留对订阅的引用然后取消订阅有什么不同 对于这个问题的开放性,我深表歉意,但我不确定如何更
PublishSubject
触发与蓝牙设备的断开连接
代码示例:
第二:通过取消订阅来断开与蓝牙设备的连接
代码示例:
我主要关注的是每个示例中的triggerDisconnect()
方法。PublishSubject
方式与仅保留对订阅的引用然后取消订阅有什么不同
对于这个问题的开放性,我深表歉意,但我不确定如何更好地解释它。不,disconnectTriggerSubject
帮助构建connectionObservable
使用前面的prepareConnectionObservable()
方法。然后作为代理将可观察的null
传递给onNext()
方法
然后在此订阅的onNext()
内:
.subscribe(
characteristic -> {
updateUI(characteristic);
Log.i(getClass().getSimpleName(), "Hey, connection has been established!");
},
this::onConnectionFailure,
this::onConnectionFinished
);
使用null
值调用updateUI(characteristic)
方法。否,disconnectTriggerSubject
帮助使用此prepareConnectionObservable()方法构建connectionObservable
。然后作为代理将可观察的null
传递给onNext()
方法
然后在此订阅的onNext()
内:
.subscribe(
characteristic -> {
updateUI(characteristic);
Log.i(getClass().getSimpleName(), "Hey, connection has been established!");
},
this::onConnectionFailure,
this::onConnectionFinished
);
updateUI(characteristic)
方法是用null
值调用的。我想我已经找到了答案。.takeUntil(disconnectTriggerSubject)
是理解disconnectTriggerSubject
的关键takeUntil()
意味着从可观察的连接发出的项目(当然是在订阅之后)将被发出,直到从disconnectTriggerSubject发出项目为止。由于disconnectTriggerSubject
是一个PublishSubject
它既是一个观察者,也是一个可观察者。由于它是可观察的,因此可以通过onNext()
方法发射项目。因此,调用disconnectTriggerSubject.onNext(null)
会导致执行takeUntil(disconnectTriggerSubject)
,这会阻止从connectionObservable
发出任何新项。这与“取消订阅”基本相同,因为它“停止在收到此订阅时注册的订阅方上接收通知。”我想我已经找到了答案。.takeUntil(disconnectTriggerSubject)
是理解disconnectTriggerSubject
的关键takeUntil()
意味着从可观察的连接发出的项目(当然是在订阅之后)将被发出,直到从disconnectTriggerSubject发出项目为止。由于disconnectTriggerSubject
是一个PublishSubject
它既是一个观察者,也是一个可观察者。由于它是可观察的,因此可以通过onNext()
方法发射项目。因此,调用disconnectTriggerSubject.onNext(null)
会导致执行takeUntil(disconnectTriggerSubject)
,这会阻止从connectionObservable
发出任何新项。这本质上与取消订阅相同,因为它“停止接收收到此订阅时注册的订阅服务器上的通知。”可以使用其他内容代替disconnectTriggerSubject来触发takeUntil?可以使用其他内容代替disconnectTriggerSubject来触发takeUntil吗?