RxJava 学习笔记<三> Lifetime management

RxJava订阅与资源管理
本文介绍了RxJava中订阅机制的细节,包括如何通过不同方式订阅Observable,如何处理异常及终止事件,以及如何通过取消订阅来管理资源。文章还探讨了Subscription的各种实现,并解释了它们在实际应用中的作用。

隐藏在Rx背后的 sequence 输出 values 或者终止对我们是未知的,但你仍然有控制接受值的开始和结束。Subscriptions 可链接到要在 sequence 结束时释放的已分配资源,RX提供对subscriptions 的控制,使您能够这样做

Subscribing

这里有 Observable.subscribe 的几个实现

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,当你没有提供参数,事件将会被忽略。

在下面的例子中,我们处理异常的情况:

205059_7fyO_2277632.png

日志输出:

205130_OuU3_2277632.png

如果你没有提供一个方法来处理异常,在调用 s.onError 的地方将会抛出 OnErrorNotImplementedException,对于 producer 和 consumer是两个地方的事情,我们传统的方式是使用 try-catch,然而,在一个独立的系统中,producer  和 subscriber 经常是在不同的地方,除非 consumer 为 subscribe 处理异常的程序,否则将不会知道 error 的发生和 sequence 的终止。

Unsubscribing

你也可以在 sequence 终止前接收值,每个 subscribe 重写了返回 Subscription 实例

调用 unsubscribe 会阻止事件被推送给observer:

103509_gHYr_2277632.png

日志输出:

234640_ai7m_2277632.png

Unsubscribing 一个 observer 不会影响到相同的其他 observable:

235003_KHSa_2277632.png

输出:

235018_lQ9E_2277632.png

onError and onCompleted

onError 和 onCompleted意味着 sequence 的终止,observable 发出的信息和事件也都不会处理,这里需要注意无论是你 RX 中消费还是自己实现的 observables:

235456_1zkH_2277632.png

输出:

235515_eY8S_2277632.png

Freeing resources

Subscription 尝试于它使用的资源相关联,因为这个原因,你需要记住处理 subscriptions,你可以使用Subscriptions factory.创建Subscription 和必要资源之间的关联。

000356_NAkW_2277632.png

输出:

000412_NNNt_2277632.png

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

 

转载于:https://my.oschina.net/u/2277632/blog/1633219

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值