RxJava的四種Subjects:PublishSubject、ReplaySubject、BehaviorSubject、AsyncSubject的理解


Subject:它既是Observable,又是observer。也就是既可以發送事件,也可以接收事件。

下面是四個子類PublishSubject、ReplaySubject、BehaviorSubject、AsyncSubject的區別:

PublishSubject<Integer> source = PublishSubject.create();  //PublicSubject:接收到訂閱之后的所有數據。
// It will get 1, 2, 3, 4 and onComplete
source.subscribe(getFirstObserver()); 
source.onNext(1);
source.onNext(2);
source.onNext(3);
// It will get 4 and onComplete for second observer also.
source.subscribe(getSecondObserver());
source.onNext(4);
source.onComplete();
ReplaySubject<Integer> source = ReplaySubject.create();  //ReplaySubject:接收到所有的數據,包括訂閱之前的所有數據和訂閱之后的所有數據。
// It will get 1, 2, 3, 4
source.subscribe(getFirstObserver());
source.onNext(1);
source.onNext(2);
source.onNext(3);
source.onNext(4);
source.onComplete();
// It will also get 1, 2, 3, 4 as we have used replay Subject
source.subscribe(getSecondObserver());
BehaviorSubject<Integer> source = BehaviorSubject.create();  //BehaviorSubject:接收到訂閱前的最后一條數據和訂閱后的所有數據。
// It will get 1, 2, 3, 4 and onComplete
source.subscribe(getFirstObserver());
source.onNext(1);
source.onNext(2);
source.onNext(3);
// It will get 3(last emitted)and 4(subsequent item) and onComplete
source.subscribe(getSecondObserver());
source.onNext(4);
source.onComplete();
AsyncSubject<Integer> source = AsyncSubject.create();  //AsyncSubject:不管在什么位置訂閱,都只接接收到最后一條數據
// It will get only 4 and onComplete
source.subscribe(getFirstObserver());
source.onNext(1);
source.onNext(2);
source.onNext(3);
// It will also get only get 4 and onComplete
source.subscribe(getSecondObserver());
source.onNext(4);
source.onComplete();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM