Android Rxjava:最简单易懂的诠释 看这篇

2023-11-13

1.前言

  • Rxjava, 具有链式调用、使用简单&事件与结果松耦合的特点。
  • Rxjava, 之所以深受欢迎它包含 非常多操作符,能通过 【链式形】 优雅整洁的代码几乎能实现所有的功能需求
  • 本文特点:图多字少逻辑简单
  • 之前面试中被问了很多Rxjava的知识,今天献一份不一样诠释,希望大家喜欢。
  • 文章中实例 linhaojian的Github

2.目录

示意图


3.简介

示意图


4.原理浅析

  • Rxjava,扩展自观察者模式

4.1 生活例子

  • 通过手机叫外卖例子,分析一下rxjava的原理。
  • 叫外卖流程

    流程图

  • 涉及的角色与对应流程

    流程图

4.2 例子结合Rxjava

  • Rxjava,包含观察者、被观察者、订阅行为&事件,与例子对应如下图:

     

    关系图

  • 对应Rxjava基本使用代码:

  public void create(){
      Observable.create(new ObservableOnSubscribe<String>() {
          @Override
          public void subscribe(ObservableEmitter<String> e) throws Exception {
              e.onNext("烤鸡一份");
              e.onNext("薯条一份");
              e.onNext("可乐一杯");
//                e.onError(new NullPointerException());
              e.onComplete();
          }
      }).subscribe(new Observer<String>() {
          @Override
          public void onSubscribe(Disposable d) {
              Log.e(TAG,"onSubscribe : 订阅成功");
          }

          @Override
          public void onNext(String s) {
              Log.e(TAG,"onNext : 接收事件  "+s);
              //按顺序得到:烤鸡一份、薯条一份、可乐一杯
          }

          @Override
          public void onError(Throwable e) {
              Log.e(TAG,"onError : 事件异常  "+e.toString());
          }

          @Override
          public void onComplete() {
              Log.e(TAG,"onComplete : 事件执行完毕  ");
          }
      });
  }

总结:
被观察者(Observable):通过订阅行为(subscribe())把事件按顺序发送到 观察者(Observer)。 观察者(Observer):按顺序接收到事件&做出响应反馈。


5.操作符

5.1创建操作符

  • 作用 :被观察者把事件发送至观察者。
  • 应用 :

    示意图

5.2变换操作符

  • 作用 :被观察者把序列事件加工为其他序列事件(变换)。
  • 原理 :结合叫外卖的例子(更改菜式)。

    示意图

  • 应用 :

    示例图

5.3合拼操作符

  • 作用 :将多个被观察组合 & 将它们需要发送的事件合拼
  • 应用 :

    示意图

5.4过滤操作符

  • 作用 :过滤/筛选 被观察者发送的事件。
  • 应用 :

    示意图

5.5条件操作符

  • 作用 :通过指定条件,判断是否接收被观察者发送的事件。
  • 应用 :

    示意图

5.6其他功能操作符

  • 作用 :被观察者发送事件时,进行功能性拓展
  • 应用 :

    示意图


6.框架设计思想

示意图


7.总结

  • Rxjava 如此好用、简单、优雅的链式任务框架库,你还等什么?
  • 到此,基本完成了rxjava相关介绍与使用,希望大家喜欢我的文章。
  • 希望该文章能帮助准备面试、准备使用Rxjava的兄die们。
  • linhaojian的Github



 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Rxjava:最简单易懂的诠释 看这篇 的相关文章

随机推荐

  • draft14

    0 什么是凸多边形
  • 回归问题先将特征变成变成正态分布

    为什么 为什么 神经网络中也用到这样的方法 神经网络 注意正态分布化与归一化的不同 怎么做怎样做
  • Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause

    Exception in thread main org apache ibatis exceptions PersistenceException Error building SqlSession The error may exist
  • Kids and COVID: why young immune systems are still on top

    亲娘啊 大概8号前后开始 到15号翻译完 除去周末 大概用了6天 每天空的时候花大概一个多小时到两个小时翻译一点点 终于弄完了 nature好难啊 语法倒是没有太多的长难句 生词太多了 看来很有可能要转战扇贝阅读了 Innate immun
  • unity实现场景跳转

    话不多说直接开始操作步骤 1 打开我们的unity创建一个工程 打开后我们先搭一个场景 建立一个Button 添加一个c 脚本 并保存场景为命名为01 结果如下 2 在菜单栏中找到File按钮New Scene新建另一个场景创建一个Butt
  • Face Swapping: Automatically Replacing Faces in Photographs论文阅读

    论文原文 Face Swapping Automatically Replacing Faces in Photographs 题目 人脸交换 自动替换照片中的人脸 图1 我们已经开发了一个系统 它自动地将输入图像中的人脸替换为从大量人脸图
  • Ctfshow web-web6 WP

    Ctfshow web we6 WP 进去看见一个login界面 看上去有点眼熟 好像做过 但是尝试之前做过的方法 回显始终是sql infect error 这样的回显表示输入的值中有非法字符 最后尝试下来是空格被顾虑了 用 代替 原来
  • MapReduce框架原理之ReduceTask工作机制

    一 Reduce Task 并行度决定机制 reduce task的并行度 也就是同时开启了几个reduce task 分为两种情况 1 如果我们自己定义了分区器 我们能够确定自己的分区器能够形成几个物理分区 加入我们要生成5个分区 那么我
  • 谈谈对CAP定理的理解

    谈谈对CAP定理的理解 CAP定理的常规解释是任何分布式系统只能在一致性 Consitency 可用性 Availability 和分区容忍性 Partition Tolerance 中三选二 这个解释很让人费解 笔者在看了一些文章后谈谈我
  • 目标检测原理群100问

    qq群号 703346870 简述yolo的多尺度变换 怎样理解残差网络可以自行选择冗余层 https baijiahao baidu com s id 1609100487339160987 梯度下降的数学原理 怎样理解包围框回归 使用g
  • 后台dom拼接xml,动态显示统计图

    1 这个东西让我好生头疼 贴代码吧 2 3 两秒后模拟点击 4 setTimeout function 5 IE 6 if document all 7 document getElementById userQuery click 8 其
  • MATLAB 更改或隐藏热图(heatmap)的坐标轴刻度

    在热图中 坐标轴标签用 data表示 更改坐标轴标签 figure my matrix rand 3 heatmap my matrix Colormap parula 3 ColorbarVisible on XLabel Time YL
  • FreeRTOS-创建删除任务

    1 FreeRTOSConfig h文件 FreeRTOSConfig h配置文件作用 对FreeRTOS进行功能配置和裁剪 以及API函数的使能 相关的宏可以分为三大类 INCLUDE 配置FreeRTOS中可选的API函数 config
  • 比较器的设计

    一 1位比较器 1位比较器原理 1位比较 Xi Yi XY的第i位 大于Great Li1 Xi Yi 小于Less Li2 Xi Yi 等于Equal Li3 Xi Yi 同或 异或非 Lij 第1个下标表示位数 第2个下标表示大小关系1
  • sql语句中case when和as用法

    在sql语句里case when then else end可以当做c语言中switch case一样是分支语句 起到不同条件处理作用 而as相当于一个别名 可以给某个列或者某个表起新的名字 比如这里有个employee表 select f
  • R语言重命名数据框列名:使用plyr包的rename函数

    R语言重命名数据框列名 使用plyr包的rename函数 在R语言中 我们经常需要对数据框 data frame 的列名进行修改 修改列名可以使得数据更易读和理解 同时也有助于数据分析和可视化过程中的操作 在本文中 我们将介绍如何使用ply
  • C++基础知识 - map和multimap容器

    map multimap的简介 map是标准的关联式容器 一个map里存储的元素是一个键值对序列 叫做 key value 键值对 它提供基于key快速检索数据的能力 map中key值是唯一的 集合中的元素按一定的顺序排列 元素插入过程是按
  • python爬虫五:beautifulsoup4的安装使用

    1 bs4简介 概念 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的网页信息提取库 安装 先安装它的依赖模块 lxml 再安装 bs4 pip install lxml gt pip install bs4 最基
  • 32万记录导入MSSQL,只需12.52秒,足足快了200多倍,省了一个小时干啥不好吗?

    现在云时代 大家都用上云了 现在云的带宽5M都觉得很大了 但是有大量的数据需要处理的话 按照传统的方式 上传一个32万记录的DBF 起码也得一个小时 而现在有款工具 来自ZHZ 可以节省你200多倍的时间 香不香 测试环境 win7 32位
  • Android Rxjava:最简单易懂的诠释 看这篇

    1 前言 Rxjava 具有链式调用 使用简单 事件与结果松耦合的特点 Rxjava 之所以深受欢迎它包含 非常多操作符 能通过 链式形 优雅整洁的代码几乎能实现所有的功能需求 本文特点 图多字少 逻辑简单 之前面试中被问了很多Rxjava