一、AsyncSubject
Observer會接收AsyncSubject的onComplete()之前的最后一個數(shù)據(jù)灰伟。
AsyncSubject<String> asyncSubject = AsyncSubject.create();
asyncSubject.onNext("asyncSubject1");
asyncSubject.onNext("asyncSubject2");
asyncSubject.onComplete();
asyncSubject.subscribe(s -> System.out.println("asyncSubject: " + s));
結(jié)果:
asyncSubject: asyncSubject2
二拆又、BehaviorSubject
Observer會先接收到 BehaviorSubject被訂閱之前的最后一個數(shù)據(jù), 再接收訂閱之后發(fā)射過 來的數(shù)據(jù)栏账。
BehaviorSubject<String> behaviorSubject = BehaviorSubject.create();
behaviorSubject.onNext("behaviorSubject1");
behaviorSubject.onNext("behaviorSubject2");
behaviorSubject.subscribe(s -> System.out.println("behaviorSubject: " + s));
behaviorSubject.onNext("behaviorSubject3");
behaviorSubject.onNext("behaviorSubject4");
behaviorSubject.onComplete();
結(jié)果:
behaviorSubject: behaviorSubject2
behaviorSubject: behaviorSubject3
behaviorSubject: behaviorSubject4
三帖族、ReplaySubject
ReplaySubject 會發(fā)射所有來自原始 Observable 的數(shù)據(jù) 給觀察者,無論它 們 是何時(shí)訂閱的挡爵。
ReplaySubject<String> replaySubject = ReplaySubject.create();
replaySubject.onNext("replaySubject1");
replaySubject.onNext("replaySubject2");
replaySubject.subscribe(s -> System.out.println("replaySubject: " + s));
replaySubject.onNext("replaySubject3");
replaySubject.onNext("replaySubject4");
replaySubject.onComplete();
結(jié)果:
replaySubject: replaySubject1
replaySubject: replaySubject2
replaySubject: replaySubject3
replaySubject: replaySubject4
四竖般、PublishSubject
Observer 只接收 PublishSubject 被訂閱之后發(fā)送的數(shù)據(jù)。
PublishSubject<String> publishSubject = PublishSubject.create();
publishSubject.onNext("publishSubject1");
publishSubject.onNext("publishSubject2");
publishSubject.subscribe(s -> System.out.println("publishSubject" + s));
publishSubject.onNext("publishSubject3");
publishSubject.onNext("publishSubject4");
publishSubject.onComplete();
結(jié)果:
publishSubjectpublishSubject3
publishSubjectpublishSubject4
五茶鹃、總結(jié)
AsyncSubject:不論訂閱發(fā)生在什么時(shí)候涣雕,只發(fā)射最后一個數(shù)據(jù)。
BehaviorSubject:發(fā)送訂閱之前的一個數(shù)據(jù)和訂閱之后的全部數(shù)據(jù)闭翩。
ReplaySubject:不論訂閱發(fā)生在什么時(shí)候挣郭,都發(fā)射全部數(shù)據(jù)。
PublishSubject:發(fā)送訂閱之后全部數(shù)據(jù)疗韵。