RxJava 系列文章

《一,RxJava create操作符的用法和源码分析》

《二,RxJava map操作符用法详解》

《三,RxJava flatMap操作符用法详解》

《四,RxJava concatMap操作符用法详解》

《五,RxJava onErrorResumeNext操作符实现app与服务器间token机制》

《六,RxJava retryWhen操作符实现错误重试机制》

《七,RxJava 使用debounce操作符 优化app搜索功能》

《八,RxJava concat操作处理多数据源》

在Android开发中的一些真实场景如何使用RxJava

该项目介绍了Rxjava一些常用的操作符和在实际场景使用的一些案例.

为了更加贴近真实项目, 项目中使用的网络请求和一些耗时任务都是请求本地服务器的. 服务器端使用Java web+Tomcat来实现的.

如果需要可以把服务器部署在你的本地机器上, 服务器代码下载地址

Example Details

1. 基础部分

基础部分介绍了 Rxjava的一些常用操作符如:createjustfrommapflatMapconcatMap vs flatMap

2. 每个HTTP请求都带token给服务器 [如果token过期则获取新token]

一般请情况下,很多公司的提api接口, 请求的的时候都需要带有token, 该token在用户第一次启动app或者登陆的时候去获取. 以后的所有请求都需要带该Token

如果token过期, 服务器将返回401, 这时候就需要去请求获取token的接口, 如果获取成功接着在请求原来的接口.

这个时候就两个回调的嵌套了. 实现起来比较费劲, 而且也不够优雅. 代码的可维护性变得很差.

可以使用 onErrorResumeNext 来处理这样的业务逻辑.

3. 搜索防抖[Search debounce]

现在几乎所有的App都有搜索功能 , 一般情况我们监听EditText控件,当值发生改变去请求搜索接口. 这将导致2个问题:

  • 可能导致很多没有意义的请求,耗费用户流量(因为控件的值没更改一次立即就会去请求网络)

  • 可能导致最终的结果不是用户想要的. 例如,用户一开始输入关键字’AB’ 这个时候出现两个请求, 一个请求是A关键字, 一个请求是AB关键字.

    表面上是’A’请求先发出去, ‘AB’请求后发出去. 如果后发出去的’AB’请求先返回, ‘A’请求后返回,那么’A’请求后的结果将会覆盖’AB’请求的结果.

    从而导致搜索结果不正确.

很多文章说使用 debounce 操作可以解决这个问题.

但是, RxJava也不能完全解决这个问题, 可以使用 debounce 操作符 也只能从一定程度上减少这种情况的出现.

比如: 一开始用户输入了AB两个字符, 在某个时间段内, 用户没有输入新的关键字, 将会发出搜索请求, 此时用户又输入新的关键字C,

那就输入框就是ABC了, 在某个时间段内, 用户没有输入新的关键字, 将会发出搜索新的请求. 如果’ABC’的请求返回比’AB’的快, 那么AB请求的结果将会覆盖’ABC’请求的结果,从而导致不正确的结果

4. Observable is dependent on another Observable’s result

例如, 在我的实际项目中上传图片到又拍云 需要先获取上传的url, 然后在上传图片. 所以上传图片这个任务需要依赖获取url这个任务

5. 检查数据缓存

比如获取列表数据, 如果数据库里有使用数据库的, 没有再去请求网络.

当然也可以应用到其他场景, 比如有多个数据源, 数据源有优先级, 哪个有数据就使用哪个.

6. HTTP 请求重试

当请求网络的时候出现错误, 我们需要重试, 如果不停的重试也没有多大意义, 出现错误延迟多少秒然后重试.

所以使用RxJava可以设置最多重试次数和延迟的时间.

7. 如何在Android中正确的使用RxJava

如何避免在Activity/Fragment内存泄露.

8. (源码下载Github)[https://github.com/chiclaim/awesome_android_rxjava]

Reference documents

  1. danlew posts
  2. jianshu posts
  3. myexception posts
  4. stackoverflow posts

RxJava在Android中使用场景详解的更多相关文章

  1. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  2. Android中的动画详解系列【4】——Activity之间切换动画

    前面介绍了Android中的逐帧动画和补间动画,并实现了简单的自定义动画,这一篇我们来看看如何将Android中的动画运用到实际开发中的一个场景--Activity之间跳转动画. 一.定义动画资源 如 ...

  3. Android中mesure过程详解

    我们在编写layout的xml文件时会碰到layout_width和layout_height两个属性,对于这两个属性我们有三种选择:赋值成具体的数值,match_parent或者wrap_conte ...

  4. Android中Intent组件详解

    Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...

  5. Android中shape属性详解

    一.简单使用 刚开始,就先不讲一堆标签的意义及用法,先简单看看shape标签怎么用. 1.新建shape文件 首先在res/drawable文件夹下,新建一个文件,命名为:shape_radius.x ...

  6. 并发编程之Android中AsyncTask使用详解(四)

    更多Android高级架构进阶视频免费学习请点击:[https://space.bilibili.com/474380680] 在Android中我们可以通过Thread+Handler实现多线程通信 ...

  7. Android中的Service详解

    今天我们就来介绍一下Android中的四大组件中的服务Service,说到Service, 它分为本地服务和远程服务:区分这两种服务就是看客户端和服务端是否在同一个进程中,本地服务是在同一进程中的,远 ...

  8. Android中Service 使用详解(LocalService + RemoteService)

    Service 简介: Service分为本地服务(LocalService)和远程服务(RemoteService): 1.本地服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外L ...

  9. Android中SQLite应用详解

    上次我向大家介绍了SQLite的基本信息和使用过程,相信朋友们对SQLite已经有所了解了,那今天呢,我就和大家分享一下在Android中如何使用SQLite. 现在的主流移动设备像Android.i ...

随机推荐

  1. [IOI 2011]ricehub

    Description 乡间有一条笔直而长的路称为“米道”.沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 0 ...

  2. [SHOI2008]cactus仙人掌图

    [题目描述] 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的回路. 举例 ...

  3. 暗牧 (m)

    题目描述在 Dato3 的世界里,英雄们通过对量子力学的研究,发现了世界上其实存在着无数个位面——即是也被称作平行宇宙的存在.位面有无数多个,每个位面中包含 n 颗行星,由 n−1 个虫洞链接.同一个 ...

  4. 【CODEVS 6384 大米兔学全排列】

    ·大米兔学习全排列,还有一些逆序对,还有一棵二叉索引树.· ·分析:       首先肯定不是像题目上说的那样,使用next_permutation去完成这道题,因为就算是线性的它也不能承受庞大的排列 ...

  5. Saltstack基础

    salt介绍 salt简单介绍 一个基础平台管理工具 一个配置管理系统,能够维护预定义状态的远程节点 一个分布式远程执行系统,用来在远程节点上执行命令和查询数据 salt的核心功能 使命令发送到远程系 ...

  6. 一款基于Vue的扩展性组件库 VV-UI

    github: https://github.com/VV-UI/VV-UI 演示地址: https://vv-ui.github.io/VV-UI/#/meta-info 1. LoadingBar ...

  7. GNS3 1.4.0b3 MSTP多生成树配置实验

    一.实验目标 掌握MSTP多生成树配置,VLAN配置,trunk配置,etherchannel配置 二.实验平台 系统:WIN7以上windows,X64版本.CPU支持虚拟化,并在BIOS中开启虚拟 ...

  8. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- CustomYieldInstruction 自定义中断指令

    ActionScript3脚本引擎为了方便热更新逻辑开发,提供的从脚本继承Unity类库功能在一些情况下可以提供开发的便利. 这次来建立一个示例,演示一下如何在脚本中自定义协程中断指令 Unity中的 ...

  9. 打印n阶菱形

    #打印n阶菱形 def print_rhombus(n): #打印正三角 for i in range(1,n+1): x_num = 2*i-1 #每一层的*数量 space_num = n - i ...

  10. python学习之路基础篇(三)

    博客参考:http://www.cnblogs.com/wupeiqi/articles/4943406.html http://www.cnblogs.com/luotianshuai/p/4949 ...