rxjava学习

作者: 吕志豪 | 来源:发表于2018-03-12 08:28 被阅读1次

    RxJava详细教程

    RxJava是Reactive Programming在Java中的一种实现。什么是响应式编程? 基于观察者模式,将事件流将从上往下,从订阅源传递到观察者。
    它可以避免回调嵌套,更优雅地切换线程实现异步处理数据。配合一些操作符,可以让处理事件流的代码更加简洁,逻辑更加清晰。

    • 创建方式


      image.png
    • 操作符


      image.png
    • 线程切换
      Scheduler调度器,相当于线程控制器

      • Schedulers.immediate() : 直接在当前线程运行,相当于不指定线程。这是默认的 Scheduler。

      • Schedulers.newThread() :总是启用新线程,并在新线程执行操作.

      • Schedulers.io():I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler。行为模式和 newThread() 差不多,区别在于 io() 的内部实现是是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。不要把计算工作放在 io() 中,可以避免创建不必要的线程。

      • Schedulers.computation() : 计算所使用的 Scheduler。这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,例如图形的计算。这个 Scheduler 使用的固定的线程池,大小为 CPU 核数。不要把 I/O 操作放在 computation() 中,否则 I/O 操作的等待时间会浪费 CPU。

      • 还有RxAndroid里面专门提供了AndroidSchedulers.mainThread(),它指定的操作将在 Android 主线程运行。

    • 背压策略

    public enum BackpressureStrategy {
       ERROR,BUFFER,DROP,LATEST,MISSING
    }
    

    Flowable的异步缓存池不同于Observable,Observable的异步缓存池没有大小限制,可以无限制向里添加数据,直至OOM,而Flowable的异步缓存池有个固定容量,其大小为128。
    BackpressureStrategy的作用便是用来设置Flowable通过异步缓存池存储数据的策略。
    ERROR

    在此策略下,如果放入Flowable的异步缓存池中的数据超限了,则会抛出MissingBackpressureException异常。
    DROP

    在此策略下,如果Flowable的异步缓存池满了,会丢掉将要放入缓存池中的数据。
    LATEST

    与Drop策略一样,如果缓存池满了,会丢掉将要放入缓存池中的数据,不同的是,不管缓存池的状态如何,LATEST都会将最后一条数据强行放入缓存池中。
    BUFFER

    此策略下,Flowable的异步缓存池同Observable的一样,没有固定大小,可以无限制向里添加数据,不会抛出MissingBackpressureException异常,但会导致OOM。

    相关文章

      网友评论

        本文标题:rxjava学习

        本文链接:https://www.haomeiwen.com/subject/nukbxftx.html