Rxjava
- 展示数据源的一组类的集合
- 监听数据源的一组类的集合
- 更改组装数据的一组方法的集合
Rxjava
- 异步
- 基于事件
- 观察序列(Observable sequence)
把我们从杂乱的回调中解救出来。我们能类似函数式编程那样在代码中插入很多转换操作。
几个概念
1.数据流(data-stream):数据(events/objects/items)按照一定的顺序流动。
2.非阻塞:工作线程不需要等待锁才能开始工作。也就是说线程之间没有同步的问题。
3.背压:
4.发布和订阅的原理机制:

热发布者和冷发布者
- 热发布者:主动模式,订阅者主动发射。如果订阅者处理速度跟不上最终可能会引起OutOfMemoryException
- 冷发布者: 被动模式,订阅者准备好的时候才发射。(flowable 和 observable)
取消订阅
当订阅者订阅一个发布者的时候,会返回一个Disposable对象,然后可调用Disposable::dispose()方法取消订阅。
Schedulers
-
subscribeOn 订阅者的创建工作是在哪个线程
-
observableOn 数据流操作符是在哪个线程
-
Schedulers.computation()
-
Schedulers.io()
-
Schedulers.from(Executor)
-
Schedulers.newThread()
背压
当发布者发射速率大于订阅者的处理能力的时候,那么这些会溢出的待发射数据就需要发布者处理。
订阅者发一个信号给发布者告诉它自己能处理多少数据,这样发布者就刚好制造那么多数据。背压就是与这样的机制关联的。
处理背压的方式有多种,例如buffering,batching,skipping。还有操作符可以处理背压。
- BackpressureStrategy.BUFFER It buffers in memory the events that overflow. If we don’t provide some threshold, it might lead to OutOfMemoryError.
- BackpressureStrategy.DROP It simply drop the overflowing events
- BackpressureStrategy.LATEST: It keeps only recent event and discards previous unconsumed events.
- BackpressureStrategy.ERROR: We get an error in the Subscriber immediately.
- BackpressureStrategy.MISSING: We use this when we don’t care about backpressure(we let one of the downstream operators onBackpressureXXX handle it)
Operators
- 操作和合并数据
- 操作线程
- 操作发射事件
2.x
- 当创建一个流的时候更少的内存分配
- 订阅一个流的时候更少的开销
why
除非你的系统可以同步同步建模,不然的话一个异步源就会不可避免的打破这种编程方式。
android app与生俱来就是需要快速响应的环境。以前每一个状态都需要程序员来管理
响应式编程和Rxjava允许我们只关心数据流向,而不必关心每个数据的状态(例如异步的)。
我们需要做的就是利用响应式编程来处理异步的数据源。而不是自己试图管理所有的状态,把这些异步数据源组合在一起。

如果该篇文章有任何问题,希望您能在百忙之中指出并联系我nanhuaqq@gmail.com
网友评论