RxJava2 学习笔记

作者: 圣斗士皮皮 | 来源:发表于2018-04-19 11:19 被阅读12次

函数响应式编程

函数响应式编程的思维是将问题抽象为数据加工,一切问题都是数据源发出数据的问题,所以用函数响应式编程需要先将问题抽象出下面的模型:

  • 数据生产者,即数据源,数据是从哪儿生成的
  • 原始数据:数据源发出的原始数据
  • 最终数据: 数据最终形态
  • 数据加工: 原始数据是如何变成最终形态的数据

如要在界面上显示在线用户的年龄,可以分解为:

  • 网络获取用户的出生日期
  • 对出生日期加工为年龄

RxJava2

有了抽象模型, RxJava 中要做的很简单:

  • 构建一个原始数据源
  • 构建加工器,放置在数据源的出口上, 形成一个新的数据源

第一步,构建一个出生日期的数据源:

Observable.create{emitter -> 
    val birthDate = getBirthDateFromNetwork()
    emitter.onNext(birthDate)
}

第二步,对数据源加工为新的数据源:

Observable.create(...).map {birthDate ->
    now.getYear()-birthDate.getYear()
}

RxJava 的事件

一个数据在流动的过程中,理想的情况是最终按照预期的变成最终的数据。但是现实总会很残酷,始上边的例子中,网络就很易出问题。所以 RxJava 中将事件抽象为下边几种:

  • 数据事件: next, 事件带一个数据参数
  • 错误事件: error, 对应数据流动过程中出现的各种异常情况
  • 完成事件: complete, 指示不会再有 next 事件了

在一个数据流中,通常是0到多个 next 事件,然后1个complete 或 1 个 error 事件.

用 RxJava 的事件来重写上边例子,加入了error事件和 complete 事件:

Observable.create{emitter -> 
    try {
        val birthDate = getBirthDateFromNetwork()
        emitter.onNext(birthDate)
        emitter.onComplete()
    }catch {error ->
        emitter.onError(error)
    }
}.map {birthDate ->
    now.getYear()-birthDate.getYear()
}

RxJava 中根据事件将数据源 Observable 分为下边几类:

数据源类 说明
Observable 0或多个next + 1个 [complete 或 error]
Single 1 个 [next 或 error]
Maybe 1 个 [complete 或 error], 注意 complete 是带一个数据参数的
Completable 1 个 [complete 或 error]

相关文章

  • RxJava2笔记(五、订阅流程梳理以及线程切换次数有效性)

    在前面的几篇文章RxJava2笔记(一、事件订阅流程)RxJava2笔记(二、事件取消流程)RxJava2笔记(三...

  • Android Develop——RxJava2(二) RxJa

    在RxJava2(一)教程中,已经跟着大神们学习了RxJava2的基本使用,现在我们来学习一下RxJava2很强大...

  • RxJava2笔记(三、订阅线程切换)

    在前面两篇文章RxJava2笔记(一、事件订阅流程)和RxJava2笔记(二、事件取消流程)中,我们分别了解了事件...

  • RxJava2 学习笔记

    函数响应式编程 函数响应式编程的思维是将问题抽象为数据加工,一切问题都是数据源发出数据的问题,所以用函数响应式编程...

  • RxJava2学习笔记

    intro "森林里的一棵树倒下来,如果周围没有人听见,那么就等于说树的倒下是寂静无声的." 随着产品功能的增加,...

  • rxjava2 学习笔记

    特点 链式调用 线程切换 操作符 创建操作符 转换操作符 过滤操作符 组合操作符 错误处理操作符 辅助性操作符 条...

  • RxJava2学习笔记

    本文参考RxJava2 只看这一篇文章就够了,强烈推荐大家去看一下。 RxJava的组成 被观察者-------O...

  • RxJava2学习笔记

    我们为什么选择RxJava Infinite Streams 无限流 Asynchronous execution...

  • Rxjava2学习笔记(一)

    网上大佬们都整理得很好了,只是老看,总觉得差点啥,所以,就想着自己再捋一遍,加深印象。给 Android 开发者的...

  • RxJava2 学习笔记(二)

    线程调度源码分析1:subscribeOn subscribeOn(Schedulers.io())这句其实就是创...

网友评论

    本文标题:RxJava2 学习笔记

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