RxJava中常見的Subject有4種,分別是 AsyncSubject、 BehaviorSubject、PublishSubject、 ReplaySubject。ide
AsyncSubjectspa
使用AsyncSubject不管輸入多少參數,永遠只輸出最後一個參數。code
BehaviorSubjectblog
BehaviorSubject會發送離訂閱最近的上一個值,沒有上一個值的時候會發送默認值。io
BehaviorSubject<Integer> subject = BehaviorSubject.create(); subject.onNext(1); subject.onNext(2); subject.onNext(3); subject.onNext(4); subject.subscribe(new Consumer<Integer>(){ @Override public void accept(Integer t) throws Exception { System.out.println(t); }});
PublishSubjectclass
使用PublishSubject從那裏訂閱就從那裏開始發送數據。數據
PublishSubject<Integer> subject = PublishSubject.create(); subject.onNext(1); subject.subscribe(new Consumer<Integer>(){ @Override public void accept(Integer t) throws Exception { System.out.println(t); }}); subject.onNext(2); subject.onNext(3); subject.onNext(4);
輸出結果2 3 4.di
ReplaySubjectvi
不管什麼時候訂閱,都會將全部歷史訂閱內容所有發出。co
ReplaySubject<Integer> subject = ReplaySubject.create(); subject.onNext(1); subject.subscribe(new Consumer<Integer>(){ @Override public void accept(Integer t) throws Exception { System.out.println(t); }}); subject.onNext(2); subject.onNext(3); subject.onNext(4);
輸出結果1 2 3 4.