Subjects 是一個繼承了 Observable 和實現 Observer 的接口,咋看之下看起來有點奇怪,可是在不少狀況可讓代碼寫起來簡單。ios
Subjects的實現有不少,咱們能夠看幾個例子,瞭解他們的不一樣之處git
PublishSubject的操做是最直截了當的,當一個值被推到 PublishSubject中,這個 subject 就會把數據給到每一個 subscriber,1 沒有輸出是由於在他 push 的時候沒有 subscribedgithub
輸出:緩存
ReplaySubject有一個緩存全部推向它數據的特性,當一個新的subscription創建,時間流將會從新開始推向subscriber,以後的就像 PublishSubject 實現同樣。在看ReplaySubject的第二個例子能夠知道,緩存全部的不是一個好主意,這樣 observable 序列會執行很長時間,咱們可使用 ReplaySubject.createWithSize 限制緩存的大小。在第三個例子中能夠看出使用 ReplaySubject.createWithTime 限制緩存的時間。spa
輸出:日誌
BehaviorSubject僅僅保留最後一個值,相似於 ReplaySubject 設置緩存一個,當建立的時候,subscription會執行。第二個例子,執行 onCompleted()方法,這是最後一個事件。第三個例子展現能夠設置初始值。server
日誌輸出:繼承
AsyncSubject 也能夠緩存最後一個值,區別是在 sequence 完成以前不會輸出任何值。接口
日誌輸出:事件
原文地址:
https://github.com/Froussios/Intro-To-RxJava/blob/master/Part%201%20-%20Getting%20Started/2.%20Key%20types.md