Rxjava學習(2)-Subject

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 註冊的時候一起通知給它。如果有多個觀察者訂閱(監聽),程序報錯,但是沒有拋出異常。

 

 



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章