2017-11-28 5 views
-1

私はブルートゥース通信用にRxAndroidBleを使用するブルートゥースプロジェクトに取り組んでいます。私はサブスクリプションがクリーンアップされる2つの異なる方法に出くわしました。私はもし誰かがあれば誰もがそれぞれの違いと利点を説明できるかどうか疑問に思っていました。 2つの例は次のとおりです。PublishSubjectを使用してRxAndroidのサブスクリプションの登録を解除するのではなく、切断をトリガーする目的は何ですか?

まず:https://github.com/Polidea/RxAndroidBle/blob/master/sample/src/main/java/com/polidea/rxandroidble/sample/example4_characteristic/CharacteristicOperationExampleActivity.java

第二:: https://github.com/Polidea/RxAndroidBle/blob/master/sample/src/main/java/com/polidea/rxandroidble/sample/example2_connection/ConnectionExampleActivity.javaSubscription

コードサンプルからの退会により、Bluetoothデバイスと切断するBluetoothデバイス

コードサンプルと切断をトリガするためにPublishSubjectを使用して

私の主な焦点は、それぞれの方法のtriggerDisconnect()ですの例。どのようにしてPublishSubjectの方法はSubscriptionへの参照を保持してからサブスクライブしないのと違うのですか?

私はこの質問がどのように開いたのか謝罪しますが、私はそれを説明することがいかにうまくできているのかは分かりません。

答えて

0

いいえ、PublishSubjectdisconnectTriggerSubject help construct connectionObservableこのprepareConnectionObservable()メソッドを先に使用します。次に、nullonNext()の観測可能なメソッドに渡すプロキシとして動作します。

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

updateUI(characteristic)方法がnull値で呼び出されます。そして、このサブスクリプションのonNext()

0

私はそれを理解したと思います。 .takeUntil(disconnectTriggerSubject)disconnectTriggerSubjectを理解するための鍵です。 takeUntil()は、項目がdisconnectTriggerSubjectから発信されるまで、(登録した後に)観測可能な接続から放出されたアイテムが放出されることを意味します。 disconnectTriggerSubjectPublishSubjectなので、それはオブザーバーでも観測可能でもあります。それが観測可能であるため、onNext()メソッドを通じてアイテムを放出することができます。そのため、disconnectTriggerSubject.onNext(null)を呼び出すとtakeUntil(disconnectTriggerSubject)が実行され、connectionObservableの新しいアイテムが放出されなくなります。これは、「このサブスクリプションが受信されたときに登録されたサブスクライバでの通知の受信を停止する」ため、サブスクリプションと本質的に同じです。 http://reactivex.io/RxJava/javadoc/rx/Subscription.html

関連する問題