RxJava 學習筆記<三> Lifetime management

隱藏在Rx背後的 sequence 輸出 values 或者終止對咱們是未知的,但你仍然有控制接受值的開始和結束。Subscriptions 可連接到要在 sequence 結束時釋放的已分配資源,RX提供對subscriptions 的控制,使您可以這樣作html

Subscribing

這裏有 Observable.subscribe 的幾個實現java

Subscription 	subscribe()
Subscription 	subscribe(Action1<? super T> onNext)
Subscription 	subscribe(Action1<? super T> onNext, Action1<java.lang.Throwable> onError)
Subscription 	subscribe(Action1<? super T> onNext, Action1<java.lang.Throwable> onError, Action0 onComplete)
Subscription 	subscribe(Observer<? super T> observer)
Subscription 	subscribe(Subscriber<? super T> subscriber)

subscribe()消費了事件,可是沒有 actions,其餘方法使用你提供的參數構建 Subscriber,當你沒有提供參數,事件將會被忽略。react

在下面的例子中,咱們處理異常的狀況:ios

日誌輸出:git

若是你沒有提供一個方法來處理異常,在調用 s.onError 的地方將會拋出 OnErrorNotImplementedException,對於 producer 和 consumer是兩個地方的事情,咱們傳統的方式是使用 try-catch,然而,在一個獨立的系統中,producer  和 subscriber 常常是在不一樣的地方,除非 consumer 爲 subscribe 處理異常的程序,不然將不會知道 error 的發生和 sequence 的終止。github

Unsubscribing

你也能夠在 sequence 終止前接收值,每一個 subscribe 重寫了返回 Subscription 實例spa

調用 unsubscribe 會阻止事件被推送給observer:日誌

日誌輸出:code

Unsubscribing 一個 observer 不會影響到相同的其餘 observable:server

輸出:

onError and onCompleted

onError 和 onCompleted意味着 sequence 的終止,observable 發出的信息和事件也都不會處理,這裏須要注意不管是你 RX 中消費仍是本身實現的 observables:

輸出:

Freeing resources

Subscription 嘗試於它使用的資源相關聯,由於這個緣由,你須要記住處理 subscriptions,你可使用Subscriptions factory.建立Subscription 和必要資源之間的關聯。

輸出:

Subscriptions.create 採起將在unsubscription上執行的操做來釋放資源,下面是建立 sequence 經常使用方法的該要。

Subscriptions.empty() 返回一個在釋放的時候不作任何事情的 Subscription,這個對你須要返回一個 Subscription 實例是頗有用的,但你的實現沒必要要釋聽任何資源。

Subscriptions.from(Subscription... subscriptions) 返回一個處理多個 subscriptions  釋放的

Subscriptions.unsubscribed() 返回已經釋放了的 Subscription

下面有幾個 Subscription 的實現:

  • BooleanSubscription
  • CompositeSubscription
  • MultipleAssignmentSubscription
  • RefCountSubscription
  • SafeSubscriber
  • Scheduler.Worker
  • SerializedSubscriber
  • SerialSubscription
  • Subscriber
  • TestSubscriber

咱們將在後續中繼續熟悉這些,Subscriber 也是實現了 Subscription 的,意味這咱們也是有一個引用 Subscriber 來終止 subscription。

原文地址:

https://github.com/Froussios/Intro-To-RxJava/blob/master/Part%201%20-%20Getting%20Started/3.%20Lifetime%20management.md#freeing-resources

相關文章
相關標籤/搜索