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