https://www.jianshu.com/p/f016f707a740
1.AsyncSubject
AsyncSubject只會發射來自原始Observable的最後一個數據。如果原始的Observable因爲發生了錯誤而終止,AsyncSubject將不會發射任何數據,但是會向Observer傳遞一個異常通知。只發射onComplete()之前的一個事件給所有Observer,技術Observer在onComplete()發射之後註冊也能收到。
2.BegaviorSubject
BehaviorSubject開始發射原始Observable最近發射的數據。如果此時還沒有收到任何數據,它會發射一個默認值,然後繼續發射其他任何來自原始Observable的數據。如果原始的Observable因爲發生了一個錯誤而終止,BehaviorSubject將不會發射任何數據,但是會向Observer傳遞一個異常通知。
3.PublishSubject
PublishSubject只會把在訂閱發生的時間點之後來自原始Observable的數據發射給觀察者。需要注意的是,PublishSubject可能會一創建完成就立刻開始發射數據,因此這裏會有一個風險:在Subject被創建後到有觀察者訂閱它之前這個時間段內,一個或多個數據可能會丟失。如果要確保來自原始Observable 的所有數據都被分發,則可以當所有觀察者都已經訂閱時,纔開始發射數據,或者改用ReplaySubject。
4.ReplaySubject
不管Observer何時訂閱ReplaySubject,ReplaySubject均會發射所有來自原始Observable的數據給Observer。有不同類型的ReplaySubject,它們用於限定Replay的範圍,例如設定Buffer的具體大小,或者設定具體的時間範圍。如果使用ReplaySubject作爲Observer,注意不要在多個線程中調用onNext、onComplete和onError方法。這可能會導致順序錯亂,並且違反了Observer規則。
5.CompletableSubject
只發送Observer發射完畢數據,即:只發送onCompelted()
6.MaybeSubject
MaybeSubject所有方法都是線程安全的。主要用於發送一個結果數據,主要方法onSuccess(),多次調用無效。一般用於驗證某個結果。
7.SingleSubject
SingleSubject和MaybeSubject區別不大,MaybeSubject提供了狀態方法,比如:onComplete()和onErrorComplete(),而SingleSubject沒有這些方法,更是印證了Single這個名字,只有onSuccess()這一個發射方法。
8.UnicastSubject
只允許一個 Observer 進行監聽,在該 Observer 註冊之前會將發射的所有的事件放進一個隊列中,並在 Observer 註冊的時候一起通知給它。如果有多個觀察者訂閱(監聽),程序報錯,但是沒有拋出異常。