操作來自O(shè)bservable的發(fā)射物和通知
Subscribe
操作符是連接觀察者和Observable的膠水。一個觀察者要想看到Observable發(fā)射的數(shù)據(jù)項,或者想要從Observable獲取錯誤和完成通知,它首先必須使用這個操作符訂閱那個Observable。
Subscribe
操作符的一般實現(xiàn)可能會接受一到三個方法(然后由觀察者組合它們),或者接受一個實現(xiàn)了包含這三個方法的接口的對象(有時叫做Observer
或Subscriber
):
onNext
每當Observable發(fā)射了一項數(shù)據(jù)它就會調(diào)用這個方法。這個方法的參數(shù)是這個Observable發(fā)射的數(shù)據(jù)項。
onError
Observable調(diào)用這個方法表示它無法生成期待的數(shù)據(jù)或者遇到了其它錯誤。這將停止Observable,它在這之后不會再調(diào)用onNext
或onCompleted
。onError
方法的參數(shù)是導(dǎo)致這個錯誤的原因的一個表示(有時可能是一個Exception或Throwable對象,其它時候也可能是一個簡單的字符串,取決于具體的實現(xiàn))。
onCompleted
如果沒有遇到任何錯誤,Observable在最后一次調(diào)用onCompleted
之后會調(diào)用這個方法。
如果一個Observable直到有一個觀察者訂閱它才開始發(fā)射數(shù)據(jù)項,就稱之為"冷"的Observable;如果一個Observable可能在任何時刻開始發(fā)射數(shù)據(jù),就稱之為"熱"的Observable,一個訂閱者可能從開始之后的某個時刻開始觀察它發(fā)射的數(shù)據(jù)序列,它可能會錯過在訂閱之前發(fā)射的數(shù)據(jù)。
RxJava中的實現(xiàn)是subscribe
方法。
如果你使用無參數(shù)的版本,它將觸發(fā)對Observable的一個訂閱,但是將忽略它的發(fā)射物和通知。這個操作會激活一個"冷"的Observable。
你也可以傳遞一到三個函數(shù)給它,它們會按下面的方法解釋:
onNext
onNext
和onError
onNext
, onError
和onCompleted
最后,你還可以傳遞一個Observer
或Subscriber
接口給它,Observer
接口包含這三個以on
開頭的方法。Subscriber
接口也實現(xiàn)了這三個方法,而且還添加了幾個額外的方法,用于支持使用反壓操作(reactive pull backpressure
),這讓Subscriber
可以在Observable完成前取消訂閱。
subscribe
方法返回一個實現(xiàn)了Subscription
接口的對象。這個接口包含unsubscribe
方法,任何時刻你都可以調(diào)用它來斷開subscribe
方法建立的Observable和觀察者之間的訂閱關(guān)系。
forEach
方法是簡化版的subscribe
,你同樣可以傳遞一到三個函數(shù)給它,解釋和傳遞給subscribe
時一樣。
不同的是,你無法使用forEach
返回的對象取消訂閱。也沒辦法傳遞一個可以用于取消訂閱的參數(shù)。因此,只有當你明確地需要操作Observable的所有發(fā)射物和通知時,你才應(yīng)該使用這個操作符。
BlockingObservable
類中也有一個類似的叫作forEach
的方法。詳細的說明見 BlockingObservable