查看原文
其他

这是一份全面 & 详细 的RxJava操作符 使用攻略

Carson_Ho 鸿洋 2019-04-05

本文作者


作者:Carson_Ho

链接:

https://www.jianshu.com/p/cd984dd5aae8

本文由作者授权发布。


这是一篇总结性的文章,所以涉及到的链接比较多,由于微信限制无法直接点击链接,可以复制粘贴访问。如果大家对RxJava很熟悉,可以根据本文提供的脉络过一下脑回路对自己学习的做一次复习;如果不了解,可以详细学习一下。


1前言


Rxjava,由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎。



如果还不了解RxJava,请看文章:


Android:这是一篇 清晰 & 易懂的Rxjava 入门教程

https://www.jianshu.com/p/a406b94f3188


RxJava如此受欢迎的原因,在于其提供了丰富 & 功能强大的操作符,几乎能完成所有的功能需求。


今天,我将为大家献上一份 RxJava操作符的详细使用攻略,希望你们会喜欢。


本系列文章主要基于 Rxjava 2.0


接下来的时间,我将持续推出 Android中 Rxjava 2.0 的一系列文章,包括原理、操作符、应用场景、背压等等 ,有兴趣可以继续关注Carson_Ho的安卓开发笔记!!

https://www.jianshu.com/users/383970bef0a0/latest_articles



本文所有代码 Demo均存放在Carson_Ho的Github地址

https://github.com/Carson-Ho/RxJava_Flowable


2目录



简介


RxJava 操作符的具体简介如下:



类型


RxJava功能强大,所以其对应的操作符的类型也非常多

根据功能作用的不同,RxJava的操作符分类如下:



下面,我将对每类的操作符进行详细讲解。


3操作符详解


注:在使用RxJava 2操作符前,记得在项目的Gradle中添加依赖:


dependencies {
     compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
     compile 'io.reactivex.rxjava2:rxjava:2.0.7'
     // 注:RxJava2 与 RxJava1 不能共存,即依赖不能同时存在
}


3.1 创建操作符


作用


创建 被观察者( Observable) 对象 & 发送事件。


应用场景



类型


根据上述应用场景,创建操作符的类型包括:



具体操作符 & 应用场景 详细介绍


Android RxJava:最基础的操作符详解 - 创建操作符

https://www.jianshu.com/p/e19f8ed863b1


实际开发需求案例

下面,我将讲解创建操作符的1个常见实际需求案例:网络请求轮询


  1. 该例子将结合Retrofit 和 RxJava 进行讲解

  2. 具体请看文章:Android RxJava 实际应用讲解:(无条件)网络请求轮询

    https://www.jianshu.com/p/11b3ec672812


3.2 变换操作符


作用


对事件序列中的事件 / 整个事件序列 进行加工处理(即变换),使得其转变成不同的事件 / 整个事件序列


具体原理



应用场景


嵌套回调(Callback hell)


类型


根据上述应用场景,常见的变换操作符类型包括:



具体操作符 & 应用场景 详细介绍


Android RxJava:图文详解 变换操作符

https://www.jianshu.com/p/904c14d253ba


实际开发需求案例


下面,我将讲解变换操作符的1个常见实际需求案例:网络请求嵌套回调


1.该例子将结合Retrofit 和 RxJava 进行讲解

2.具体请看文章:Android RxJava 实际应用讲解:网络请求嵌套回调

https://www.jianshu.com/p/5f5d61f04f96


3.3 组合 / 合并操作符


作用


组合 多个被观察者(Observable) & 合并需要发送的事件


应用场景


  1. 组合多个被观察者

  2. 合并多个事件

  3. 发送事件前追加发送事件

  4. 统计发送事件数量


类型


根据上述应用场景,常见的组合 / 合并操作符 主要有:



具体操作符 & 应用场景 详细介绍


Android RxJava:组合 / 合并操作符 详细教程

https://www.jianshu.com/p/c2a7c03da16d


实际开发需求案例


下面,我将讲解组合操作符的常见实际需求案例


该例子将结合Retrofit 和 RxJava 进行讲解


1. Android RxJava 实际应用讲解:合并数据源

https://www.jianshu.com/p/fc2e551b907c

2. Android RxJava 实际应用讲解:从磁盘 / 内存缓存中 获取缓存数据

https://www.jianshu.com/p/6f3b6b934787

3. Android RxJava 实际应用讲解:联合判断

https://www.jianshu.com/p/2becc0eaedab


3.4 功能性操作符


作用


辅助被观察者(Observable) 在发送事件时实现一些功能性需求


实际应用场景


  1. 连接(订阅) 观察者 & 被观察者

  2. 线程调度(切换)

  3. 错误处理

  4. 事件生命周期操作

  5. 延时操作

  6. 重复发送操作


类型


根据上述应用场景,常见的功能性操作符 主要有:



具体操作符 & 应用场景 详细介绍


Android RxJava:功能性操作符 全面讲解

https://www.jianshu.com/p/b0c3669affdb


实际开发需求案例


下面,我将讲解组合操作符的常见实际需求案例


该例子将结合Retrofit 和 RxJava 进行讲解


1. Android RxJava:细说 线程控制(切换 / 调度 )(含Retrofit实例讲解)

https://www.jianshu.com/p/5225b2baaecd

2. Android RxJava 实际应用讲解:网络请求出错重连(结合Retrofit)

https://www.jianshu.com/p/508c30aef0c1

3. Android RxJava 实际应用讲解:(有条件)网络请求轮询(结合Retrofit)

https://www.jianshu.com/p/dbeaaa4afad5


3.5 过滤操作符


作用


过滤 / 筛选 被观察者(Observable)发送的事件 & 观察者 (Observer)接收的事件


应用场景


  1. 根据 指定条件 过滤事件

  2. 根据 指定事件数量 过滤事件

  3. 根据 指定时间 过滤事件

  4. 根据 指定事件位置 过滤事件


类型


根据上述应用场景,常见的过滤操作符 主要有:


具体操作符 & 应用场景 详细介绍


Android RxJava:过滤操作符 全面讲解

https://www.jianshu.com/p/c3a930a03855


实际开发需求案例


下面,我将讲解组合操作符的常见实际需求案例


该例子将结合Retrofit 和 RxJava 进行讲解


1. Android RxJava 实际应用讲解:功能防抖

https://www.jianshu.com/p/90d53c791c42

2. Android RxJava 实际应用讲解:联想搜索优化

https://www.jianshu.com/p/ba0e7df9b927


3.6 条件 / 布尔操作符


作用


通过设置函数,判断被观察者(Observable)发送的事件是否符合条件


类型


RxJava2中,条件 / 布尔操作符的类型包括:



具体操作符详解


1. Android RxJava:详解 条件 / 布尔操作符

https://www.jianshu.com/p/954426f90325


至此,关于RxJava 2 中的操作符讲解完毕。


4总结


本文主要对 RxJava2 中常用的所有类型操作符进行了详细介绍,下面用1张图进行总结



这是一篇总结性的文章,所以涉及到的链接比较多,可以点击阅读原文,也可以复制链接访问。



最后推荐一下我做的网站,玩Android: wanandroid.com ,包含详尽的知识体系、好用的工具,还有本公众号文章合集,欢迎体验和收藏!



推荐阅读

来做一个3D效果的小米指南针

Android 混淆查缺补漏



如果你想要跟大家分享你的文章,欢迎投稿~

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存