Rxjava2笔记

Rxjava

  • 展示数据源的一组类的集合
  • 监听数据源的一组类的集合
  • 更改组装数据的一组方法的集合

Rxjava

  • 异步
  • 基于事件
  • 观察序列(Observable sequence)
    把我们从杂乱的回调中解救出来。我们能类似函数式编程那样在代码中插入很多转换操作。

几个概念

1.数据流(data-stream):数据(events/objects/items)按照一定的顺序流动。
2.非阻塞:工作线程不需要等待锁才能开始工作。也就是说线程之间没有同步的问题。
3.背压:
4.发布和订阅的原理机制:

Rxjava2笔记_第1张图片
image.png

热发布者和冷发布者

  • 热发布者:主动模式,订阅者主动发射。如果订阅者处理速度跟不上最终可能会引起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允许我们只关心数据流向,而不必关心每个数据的状态(例如异步的)。
我们需要做的就是利用响应式编程来处理异步的数据源。而不是自己试图管理所有的状态,把这些异步数据源组合在一起。

Rxjava2笔记_第2张图片
rxjava2.png

如果该篇文章有任何问题,希望您能在百忙之中指出并联系我[email protected]

你可能感兴趣的:(Rxjava2笔记)