隐藏在Rx背后的 sequence 输出 values 或者终止对咱们是未知的,但你仍然有控制接受值的开始和结束。Subscriptions 可连接到要在 sequence 结束时释放的已分配资源,RX提供对subscriptions 的控制,使您可以这样作html
这里有 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
你也能够在 sequence 终止前接收值,每一个 subscribe 重写了返回 Subscription 实例spa
调用 unsubscribe 会阻止事件被推送给observer:日志
日志输出:code
Unsubscribing 一个 observer 不会影响到相同的其余 observable:server
输出:
onError 和 onCompleted意味着 sequence 的终止,observable 发出的信息和事件也都不会处理,这里须要注意不管是你 RX 中消费仍是本身实现的 observables:
输出:
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