正文
前言
-
Rxjava
由于其
基于事件流的链式调用、逻辑简洁 & 使用简单
的特点,深受各大
Android
开发者的欢迎。
如果还不了解RxJava,请看文章:
Android:这是一篇 清晰 & 易懂的Rxjava 入门教程
-
今天,我将为大家带来
Rxjava
的的基本使用 &
实际应用案例教学
,即
常见开发应用场景实现
,并结合常用相关框架如
Retrofit
等,希望大家会喜欢。
-
本系列文章主要基于
Rxjava 2.0
-
接下来的时间,
我将持续推出
Android
中
Rxjava 2.0
的一系列文章,包括原理、操作符、应用场景、背压等等
,有兴趣可以继续关注
Carson_Ho的安卓开发笔记
!!
目录
1. 简介
RxJava
的简介如下
2. 基本使用
3. 实际开发应用场景
-
RxJava
的实际开发应用场景 与 其对应的操作符息息相关
-
常见的
RxJava
实际开发应用场景有如下:
下面实例皆结合常用框架如
Retrofit
、
RxBinding
、
RxBus
等
3.1 网络请求轮询(无条件)
3.2 网路请求轮询(有条件)
3.3 网络请求出错重连
-
需求场景
-
功能需求说明
3.4 网络请求嵌套回调
-
背景
需要进行嵌套网络请求:即在第1个网络请求成功后,继续再进行一次网络请求
如 先进行
用户注册
的网络请求, 待注册成功后回再继续发送
用户登录
的网络请求
下面展示的是结合
Retrofit
与
RxJava
的基本用法,即未用操作符前
// 发送注册网络请求的函数方法
private void register() {
api.register(new RegisterRequest())
.subscribeOn(Schedulers.io()) //在IO线程进行网络请求
.observeOn(AndroidSchedulers.mainThread()) //回到主线程去处理请求结果
.subscribe(new Consumer<RegisterResponse>() {
@Override
public void accept(RegisterResponse registerResponse) throws Exception {
Toast.makeText(MainActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
login(); //注册成功, 调用登录的方法
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Toast.makeText(MainActivity.this, "注册失败", Toast.LENGTH_SHORT).show();
}
});
}
// 发送登录网络请求的函数方法
private void login() {
api.login(new LoginRequest())
.subscribeOn(Schedulers.io()) //在IO线程进行网络请求
.observeOn(AndroidSchedulers.mainThread()) //回到主线程去处理请求结果
.subscribe(new Consumer<LoginResponse>() {
@Override
public void accept(LoginResponse loginResponse) throws Exception {
Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
}
});
}
3.5 从磁盘 / 内存缓存中 获取缓存数据
3.6 合并数据源
3.7 联合判断
如,填写表单时,需要表单里所有信息(姓名、年龄、职业等)都被填写后,才允许点击 "提交" 按钮
3.8 线程控制(切换 / 调度 )
3.9 功能防抖
-
需求场景
-
功能说明
3.10 联想搜索优化
-
需求场景
-
功能说明
3.11 控制被观察者发送事件 & 观察者接收事件速度:背压
a. 背景
-
观察者 & 被观察者 之间存在2种订阅关系:同步 & 异步。具体如下:
-
对于异步订阅关系,存在
被观察者发送事件速度 与观察者接收事件速度 不匹配的情况
-
发送 & 接收事件速度 = 单位时间内 发送&接收事件的数量
-
大多数情况,主要是
被观察者发送事件速度 > 观察者接收事件速度
b. 冲突