RxJava中的事件流

1,883 阅读2分钟

事件创建

通过Observable等创建事件

事件发送

通过ObservableEmitter发送事件,当subscribe调用时发送开始

事件接收

  • 下游可以接收next事件、complete事件和error事件
  • 上游可以不发送onComplete或onError。
  • onComplete和onError都是事件接收结束的标志,两者互斥。
    1.当上游发送了一个onComplete后,上游onComplete之后的事件将会继续发送,而下游收到onComplete事件之后将不再继续接收其他事件。
    2.当上游发送了一个onError后, 上游onError之后的事件将继续发送, 而下游收到onError事件之后将不再继续接收其他事件.

事件流中断

通过 dispose 中断事件流的接收

  • 调用dispose()并不会导致上游不再继续发送事件, 上游会继续发送剩余的事件.(异步情况下)

统一管理事件的容器CompositeDisposable

  • CompositeDisposable.add()逐一添加事件流
  • CompositeDisposable.clear()中断所有事件流

事件转换操作符

  • map,将上游的对象 转换 为下游需要的对象
  • flatMap,将上游的Observable 变换为 多个发送事件的Observables,然后将它们发射的事件发往一个单独的Observable里.
  • concatMap,保证了上游发送顺序的 flatMap加强版
  • zip,合并多个Observable发送的事件(各取出一个,同时发送到下游)

事件流中的背压 backpressure

  1. 通过控制上游的事件发送 数量
  2. 通过控制上游的事件发送 速度
  • Flowable 具备背压策略,下游可以通过request(num) 响应式拉取事件(onSubscribe(subscribetion s))
  1. 同步时:如果没有拉取 会被认为下游无消化能力抛出 MissingBackpressureException
  2. 异步时:不拉取仍然会发送事件,但下游不会接收到任何事件。
  3. Flowable默认背压128个事件, 默认下游消费掉96个后再次发送96填满128
  4. 几个策略 error,buffer,drop,latest
  5. inteval操作符的背压

相关介绍 www.jianshu.com/p/464fa0252…