2017-11-28 8 views
-1

저는 블루투스 통신을 위해 RxAndroidBle을 사용하는 블루투스 프로젝트를 진행하고 있습니다. 나는 구독이 정리되는 두 가지 다른 방법을 발견했습니다. 나는 누군가가 차이점과 혜택을 설명 할 수 있는지 궁금해했다. 두 가지 예는 다음과 같습니다.PublishSubject를 사용하여 RxAndroid의 구독을 구독 취소하는 대신 연결을 해제하는 목적은 무엇입니까?

첫째 : 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.javaPublishSubject을 사용하면 블루투스 장치

코드 샘플과 단절을 유발합니다

제가 가장 중점을 둡니다 각각의 방법은 triggerDisconnect()입니다 예제 중. 어떤 식 으로든 PublishSubjectSubscription에 대한 참조를 유지 한 다음 구독을 취소하는 것과 다릅니다.

나는이 질문을 어떻게 끝내 었는지에 대해 사과하지만 어떻게 설명해야 할 지 잘 모르겠습니다.

답변

0

아니요, PublishSubjectdisconnectTriggerSubjectprepareConnectionObservable() 방법을 사용하여 connectionObservable을 작 성하는 데 도움이됩니다. 그런 다음 프록시로 행동하여 nullonNext() 관찰 가능한 방법으로 전달합니다. 이 구독의 onNext() 내부 그리고

은 :

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

updateUI(characteristic) 방법은 null 값으로 호출되는됩니다.

0

나는 그것을 이해했다고 생각합니다. .takeUntil(disconnectTriggerSubject)disconnectTriggerSubject을 이해하는 데 핵심입니다. takeUntil()은 항목이 disconnectTriggerSubject에서 방출 될 때까지 관찰 할 수있는 연결에서 방출 된 항목 (물론 가입 한 후)이 방출됨을 의미합니다. disconnectTriggerSubjectPublishSubject이므로 관찰자이며 관찰 가능합니다. 그것이 관측 가능하기 때문에 onNext() 방법을 통해 항목을 방출 할 수 있습니다. 따라서 disconnectTriggerSubject.onNext(null)을 호출하면 takeUntil(disconnectTriggerSubject)이 실행되어 connectionObservable의 새 항목이 방출되지 않습니다. 이것은 본 구독이 수신되었을 때 등록 된 구독자에 대한 알림 수신을 중지하기 때문에 본질적으로 구독 취소와 같습니다. http://reactivex.io/RxJava/javadoc/rx/Subscription.html