Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在RxAndroid中使用PublishSubject触发断开连接而不仅仅是取消订阅的目的是什么?_Java_Android_Bluetooth_Rx Android - Fatal编程技术网

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

Java 在RxAndroid中使用PublishSubject触发断开连接而不仅仅是取消订阅的目的是什么?,java,android,bluetooth,rx-android,Java,Android,Bluetooth,Rx Android,我正在做一个蓝牙项目,它使用RxAndroidBle进行蓝牙通信。我遇到了两种清理订阅的不同方法。我想知道是否有人能解释每种方法的区别和好处(如果有的话)。这两个例子如下 第一:使用PublishSubject触发与蓝牙设备的断开连接 代码示例: 第二:通过取消订阅来断开与蓝牙设备的连接 代码示例: 我主要关注的是每个示例中的triggerDisconnect()方法。PublishSubject方式与仅保留对订阅的引用然后取消订阅有什么不同 对于这个问题的开放性,我深表歉意,但我不确定如何更

我正在做一个蓝牙项目,它使用RxAndroidBle进行蓝牙通信。我遇到了两种清理订阅的不同方法。我想知道是否有人能解释每种方法的区别和好处(如果有的话)。这两个例子如下

第一:使用
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吗?