How can PublishSubject and BehaviorSubject be unsubscribed from?

后端 未结 3 1736
[愿得一人]
[愿得一人] 2020-12-23 09:52

Under the subjects package you have classes like PublishSubject and BehaviorSubject which I suppose can be described as some usable sa

3条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-23 10:09

    Subjects are essentially are both Observables and Observers.

    An Observable is essentially a thing that has a function that takes an Observer and returns a subscription. So, for example, given simple observable:

        Observable observable = Observable.create(new Observable.OnSubscribeFunc() {
            @Override
            public Subscription onSubscribe(Observer observer) {
                observer.onNext(3);
                observer.onNext(2);
                observer.onNext(1);
                observer.onCompleted();
    
                return Subscriptions.empty();
            }
        });
    

    And here we would subscribe to it, to print out a line for each integer:

        Subscription sub = observable.subscribe(new Action1() {
            @Override
            public void call(Integer integer) {
                System.out.println(integer);
            }
        });
    

    You would unsubscribe on the above by calling sub.unsubscribe().

    Here is a PublishSubject that does roughly the same thing:

        PublishSubject publishSubject = PublishSubject.create();
        Subscription subscription = publishSubject.subscribe(new Action1() {
            @Override
            public void call(Integer integer) {
                System.out.println(integer);
            }
        });
    
        publishSubject.onNext(3);
        publishSubject.onNext(2);
        publishSubject.onNext(1);
    

    You would unsubscribe from it the same way, by calling subscription.unsubscribe().

提交回复
热议问题