我正在开发一个使用RxAndroidBle进行蓝牙通信的蓝牙项目。我遇到了两种不同的方式来清理订阅。我想知道是否有人可以解释每个人的差异和好处,如果有的话。这两个例子如下。
首先:使用PublishSubject
触发与蓝牙设备的断开连接
第二:通过取消订阅Subscription
我主要关注每个示例中的triggerDisconnect()
方法。 PublishSubject
方式在哪些方面不同于仅仅保留对Subscription
的引用然后取消订阅?
我为这个问题的开放性而道歉,但我不确定如何更好地解释它。
答案 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
发出项目之前,将发出从连接可观察的项目(在订阅之后)发出的项目。由于disconnectTriggerSubject
是PublishSubject
,因此它既是观察者又是观察者。由于它是一个可观察的,它可以通过onNext()
方法发出项目。因此,调用disconnectTriggerSubject.onNext(null)
会导致takeUntil(disconnectTriggerSubject)
执行,这会阻止connectionObservable
中的任何新项目被发出。这与取消订阅基本相同,因为它"停止在收到此订阅时注册的订阅者收到通知。" http://reactivex.io/RxJava/javadoc/rx/Subscription.html