Rxjava2 Note

线程切换

  • subscribeOn - 切换上游线程,但仅调用的第一次生效
  • observeOn - 切换下游线程,调用一次切换一次

上下游在同一线程(默认)

  • 单个事件源:上游onNext一次进入阻塞,下游处理一次,处理完毕上游继续onNext,如此循环直至onComplete或onError
  • 多个事件源:如zip(),按zip事件源参数顺序执行

上下游不在同一线程

  • 单个事件源:上游只管onNext,下游只管处理
  • 当事件源生产过快,而消费者消费事件速度慢:RxJava1中,内存数据超过128个时将会抛出MissingBackpressureException;而在RxJava2中并不会报错,数据会一直放到内存中,直到发生OOM

取消回调避免内存泄漏

  • Observable:通过下游onSubscribe传给我们的Disposable对象,调用disposable.dispose()切断上游传过来的事件
  • Flowable:通过下游onSubscribe传给我们的Subscription对象,
    调用subscription.cancel()切断上游传过来的事件

新引入的Flowable

  • BackpressureStrategy.ERROR
  • 上下游同步:
    没有subscription.request(requestCount)或requestCount
  • 上下游异步:
    上游会有个缓存128个onNext数据的“水缸”,超出128未处理时,同样会回调onError:MissingBackpressureException,下游可以动态调用subscription.request(requestCount)来分步处理“水缸”中的数据
  • BackpressureStrategy.BUFFER
    和Observable类似
  • BackpressureStrategy.DROP
    “水缸”满了,其余事件统统不要
  • BackpressureStrategy.LATEST
    “水缸”满了,除了最后一个事件外其余事件统统不要一个事件

你可能感兴趣的:(Rxjava2 Note)