专栏名称: Carson_Ho
走在产品路上的Android研究生
目录
相关文章推荐
鸿洋  ·  彻底掌握 Android14 Vsync 原理 ·  10 小时前  
开发者全社区  ·  你们的小姨,行长夫人火了 ·  11 小时前  
开发者全社区  ·  上海相亲流行女生请客? ·  昨天  
开发者全社区  ·  年会上被迫营业的小姐姐 ·  昨天  
开发者全社区  ·  和导师外出,他牵我手了... ·  2 天前  
51好读  ›  专栏  ›  Carson_Ho

Android :这是一份详细的 RxJava 实际应用案例教学

Carson_Ho  · 掘金  · android  · 2018-01-25 00:21

正文

前言

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

Github截图

如果还不了解RxJava,请看文章: Android:这是一篇 清晰 & 易懂的Rxjava 入门教程

  • 今天,我将为大家带来 Rxjava 的的基本使用 & 实际应用案例教学 ,即 常见开发应用场景实现 ,并结合常用相关框架如 Retrofit 等,希望大家会喜欢。
    1. 本系列文章主要基于 Rxjava 2.0
    2. 接下来的时间, 我将持续推出 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 联合判断

  • 需求场景 需要同时对多个事件进行联合判断

    如,填写表单时,需要表单里所有信息(姓名、年龄、职业等)都被填写后,才允许点击 “提交” 按钮

  • 功能说明
    此处采用 填写表单 作为联合判断功能展示,即, 表单里所有信息(姓名、年龄、职业等)都被填写后,才允许点击 “提交” 按钮

  • 具体实现
    Android RxJava 实际应用讲解:联合判断


3.8 线程控制(切换 / 调度 )


3.9 功能防抖

  • 需求场景
    示意图

  • 功能说明

示意图


3.10 联想搜索优化

  • 需求场景
    示意图

  • 功能说明

示意图


3.11 控制被观察者发送事件 & 观察者接收事件速度:背压

a. 背景

  • 观察者 & 被观察者 之间存在2种订阅关系:同步 & 异步。具体如下:

示意图







请到「今天看啥」查看全文


推荐文章
鸿洋  ·  彻底掌握 Android14 Vsync 原理
10 小时前
开发者全社区  ·  你们的小姨,行长夫人火了
11 小时前
开发者全社区  ·  上海相亲流行女生请客?
昨天
开发者全社区  ·  年会上被迫营业的小姐姐
昨天
开发者全社区  ·  和导师外出,他牵我手了...
2 天前
江门广播电视台  ·  【荐读】请和相处舒服的人在一起!
7 年前
医学影像服务中心  ·  【今日征象】常青藤征
7 年前
中信建投证券研究  ·  【建筑】建筑央企的短期逻辑与中期趋势
7 年前
思想聚焦  ·  好婚姻的标配是什么?
7 年前