【Android】RxJava系列01-基本概述和基本用法

少年啊,要永远相信美好的事情即将发生

【Android】RxJava系列01-基本概述和基本用法

    • 1.RxJava的概述
    • 2.RxJava的作用
    • 3.观察者和被观察者
    • 4.背压
    • 5.RxJava的基本用法
      • 步骤一,创建Observer(观察者)
      • 步骤二,创建Observable(被观察者)
      • 步骤三,Subscribe(订阅)

1.RxJava的概述

RxJava是什么?是ReactiveX的一种Java实现。
那,ReactiveX又是什么,我来与君言。
ReactiveX 是 Reactive Extensions的缩写,一般简写为Rx,就这?确实就这。但是微软给出的定义是,Rx是一个函数库,让开发者可以利用可观察序列和LINQ(Language Integrated Query)风格查询操作符来编写异步和基于事件的程序。开发者可以利用Observables 表示异步数据流,用LINQ操作符查询异步数据流,用Schedulers参数化异步数据流的并发处理,Rx可以这样定义:Rx = Observables + LINQ +Schedulers
在这里插入图片描述
啊?这这这。定义总是这么抽象,记住Rx是可观察,能异步处理数据流程序的函数库就行了

2.RxJava的作用

大家平时开发中很多场景会用到异步操作,在Android中,我们会用到AsyncTask和Handler,或者创建callback来回调,但是随着请求的数量越来越多,代码逻辑会变得复杂,对阅读代码人来说就是一种“回调地狱”。通过使用RxJava仍旧能保持清晰的逻辑。RxJava的原理是创建一个Observable对象来“干活”,然后使用各种操作符建立起来的链式操作,就如流水线一样,如德芙一样丝滑,把你想要处理的数据一步一步地加工成你想要的成品,之后发送给Subscriber处理(哟,介么帅)。

3.观察者和被观察者

RxJava的异步操作是通过扩展的观察者模式来实现的。
在RxJava中,Observable代表了被观察者,Observer代表了观察者,在RxJava 3.x中有以下几个被观察者

  • Observable:发送0个或N个数据,不支持背压。
  • Flowable:发送0个或N个数据秒支持背压,它是在RxJava2之后才有的新类型。
  • Single:只处理OnSuccess和onError事件,只能发送单个数据或者发送一个错误。
  • Compleable:Compleable在创建后,不会发送任何数据,只处理onComplete和onError
  • Maybe: 能够发送0个或1个数据。它是在RxJava

4.背压

什么是背压?
背压指的是,在异步场景中,被观察者发送事件的速度远快于观察者处理事件速度的情况下,一种告知上游的被观察者降低发送速度的策略。
从RxJava 2 开始,Observable不再支持背压,而是新增了被观察者Flowable支持背压。Flowable中的操作符和Observable类似,其所有的操作符均强制支持背压。

5.RxJava的基本用法

以RxJava3为例,引入依赖

    implementation("io.reactivex.rxjava3:rxandroid:3.0.0")implementation("io.reactivex.rxjava3:rxjava:3.0.0")

其中,RxAndroid是RxJava在Android平台的扩展,它包含了一些能够简化Android开发的工具。
RxJava的基本用法分为3个步骤

步骤一,创建Observer(观察者)

它决定事件触发的时候将有怎样的行为,代码如下所示

        val observer = object : Observer<String> {override fun onSubscribe(d: Disposable) {Log.e(TAG, "onSubscribe d ${d.isDisposed} ")}override fun onError(e: Throwable) {Log.e(TAG, "onError e $e ")}override fun onComplete() {Log.e(TAG, "onComplete")}override fun onNext(t: String) {Log.e(TAG, "onNext t: $t")}}
  • onComplete:事件队列完结,RxJava不仅把每个事件单独处理,而且还会把它们看作一个队列。当不会有新的onNext发出时,需要触发onComplete方法作为完成标志。
  • onError:事件队列异常。在事件处理过程中出现异常时,onError方法会触发,同时队列会自动终止,不允许再有事件发出,
  • onNext:普通的事件。将要处理的事件添加到事件队列中
  • onSubscibe:当订阅时会被调用

步骤二,创建Observable(被观察者)

它决定什么时候触发事件以及触发怎样的事件,RxJava使用create方法来创建一个Observable,并为它定义事件触发规则,代码如下所示:

        /*** 基本创建方式*/val observable = Observable.create { emitter ->emitter.onNext("新年快乐")emitter.onNext("龙年吉祥")emitter.onComplete()}

通过调用subscribe的方法,不断地将事件添加到任务队列中,也可用just方法来实现:

        /*** 通过 just 创建*/val observable2 = Observable.just("你好","我是保安队长")

步骤三,Subscribe(订阅)

订阅只需要一行代码就可以了,如下所示:

        observable.subscribe(observer)

通过create创建,输出日志如下:

	  onSubscribe d falseonNext t: 新年快乐onNext t: 龙年吉祥onComplete

通过just创建,输出日志如下:

     onSubscribe d falseonNext t: 你好onNext t: 我是保安队长onComplete

两种方式都是一样,先调用onSubscribe方法,接着调用两个onNext方法,最后调用onComplete方法。

今天的学习学习到此收尾啦,万事开头难,继续坚持,后续学习RxJava常用的操作符
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/666556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为nova12系列:图片HDR显示,让你的照片全面升级!

你是不是也想给自己的照片加点料&#xff0c;让它们看起来更真实、捕捉到更多的细节和光影&#xff1f;不用愁&#xff0c;华为nova12系列就为你量身打造了图片HDR显示技术&#xff0c;让你的照片从此焕发绚丽光芒&#xff01; 回忆一下&#xff0c;在节日的夜晚想拍下绚丽的灯…

自己动手写编译器:属性语法的实现

上一节我们研究了增强语法&#xff0c;本节我们看看何为属性语法。属性语法实则是在语法规则上附带上一些重要的解析信息&#xff0c;随着语法解析的进行&#xff0c;我们可以利用附带的解析信息去进行一系列操作&#xff0c;例如利用解析信息实现代码生成。我们先看属性语法的…

免费ai绘画软件选择哪个?

对于免费AI绘画软件的选择&#xff0c;因为每个软件都有其独特的优点和适用场景&#xff0c;可以根据个人的需求和技能水平来决定。以下是被广泛认可的AI绘画软件&#xff1a; 1、建e网AI-一款为建筑室内设计师提供AI绘图的智能工具&#xff0c;具有文字生图&#xff0c;方案优…

Python学习之路-Tornado基础:深入Tornado

Python学习之路-Tornado基础:深入Tornado Application settings 前面的学习中&#xff0c;我们在创建tornado.web.Application的对象时&#xff0c;传入了第一个参数——路由映射列表。实际上Application类的构造函数还接收很多关于tornado web应用的配置参数&#xff0c;在…

值得收藏的上千个涉及各个领域各个方面的免费的API接口服务,全网盘点并统计了网上诸多的免费API

值得收藏的上千个涉及各个领域各个方面的免费的API接口服务&#xff0c;全网盘点并统计了网上诸多的免费API。 一位开发者在GitHub上维护的免费API文档&#xff0c;不定期收录了互联网上开放的各种API接口。这些接口有些是来自第三方服务&#xff0c;你只需要在第三方注册成为会…

如何使用 FOFA 搜索引擎保姆级教程(附链接)

一、介绍 FOFA&#xff08;Fingerprinting Organizations with Advanced Tools&#xff09;是一家总部位于中国的网络安全公司提供的一款网络搜索引擎&#xff0c;专注于帮助用户收集和分析互联网上的设备和服务信息。FOFA 的主要特点包括&#xff1a; 设备指纹识别&#xff1…

面试150 颠倒二进制位 位运算分治 逻辑右移

Problem: 190. 颠倒二进制位 文章目录 思路复杂度位运算分治法 思路 &#x1f468;‍&#x1f3eb; 参考题解 >>>&#xff1a;逻辑右移&#xff08;符号位一起移动&#xff0c;高位补零&#xff09; 复杂度 时间复杂度: O ( log ⁡ n ) O(\log{n}) O(logn) 空间…

Win10系统搭建个人hMailServer邮件服务结合内网穿透远程发邮件

文章目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpola…

基于IATF思想构建网络安全治理体系

文章目录 前言一、企业网络安全现状(一)防御碎片化。(二)常见网络安全问题频发。(三)安全意识教育难度大。二、“纵深防御”式综合治理体系建设方案(一)三个核心要素(二)四个保障领域1、网络和基础设施2、区域边界3、计算环境4、支撑性基础设施总结前言 近年来,国家…

计算机网络_1.6.1 常见的三种计算机网络体系结构

1.6.1 常见的三种计算机网络体系结构 1、OSI&#xff08;七层协议&#xff09;标准失败的原因2、TCP/IP参考模型3、三种网络体系结构对比 笔记来源&#xff1a; B站 《深入浅出计算机网络》课程 1、OSI&#xff08;七层协议&#xff09;标准失败的原因 &#xff08;1&#xf…

Django的web框架Django Rest_Framework精讲(四)

文章目录 1.DRF认证组件Authentication2.权限Permissions3.限流Throttling4.过滤Filtering5.排序6.分页Pagination7.异常处理 Exceptions8.自动生成接口文档 大家好&#xff0c;我是景天&#xff0c;今天我们继续DRF的最后一讲&#xff0c;Django的web框架Django Rest_Framewor…

STM32--揭秘中断(简易土货版)

抢占优先级响应优先级 视频学习--中断​​​​​​​

正则表达式可视化工具regex-vis

什么是正则表达式 &#xff1f; 正则表达式是对字符串操作的一种逻辑公式&#xff0c;就是用事先定义好的一些特定字符、及这些特定字符的组合&#xff0c;组成一个“规则字符串”&#xff0c;这个“规则字符串”用来表达对字符串的一种过滤逻辑。【百度百科】 正则表达式用简短…

Java和JavaScript的区别与联系

JavaScript 和 Java 是两种完全不同的编程语言&#xff0c;它们的名称虽然相似&#xff0c;但并没有直接的关系。 JavaScript 的名字来源于它最初被命名为 LiveScript&#xff0c;并在 1995 年被 Netscape 公司更名为 JavaScript&#xff0c;以吸引更多使用 Java 的开发者。这…

Ubuntu下的文件压缩与解压:gzip、bzip2、tar、rar 和 zip详解

Ubuntu下的文件压缩与解压&#xff1a;gzip、bzip2、tar、rar 和 zip详解 在 Ubuntu 操作系统中&#xff0c;文件压缩与解压是日常操作中常见的任务之一。本文将介绍五种常用的压缩和解压工具&#xff1a;gzip、bzip2、tar、rar 和 zip&#xff0c;在 Ubuntu 中的使用方法和常…

【图论】基环树

基环树其实并不是树&#xff0c;是指有n个点n条边的图&#xff0c;我们知道n个点n-1条边的连通图是树&#xff0c;再加一条边就会形成一个环&#xff0c;所以基环树中一定有一个环&#xff0c;长下面这样&#xff1a; 由基环树可以引申出基环内向树和基环外向树 基环内向树如…

【新书推荐】5.2 位运算符

本节必须掌握的知识点&#xff1a; 位运算 示例十七 代码分析 汇编解析 5.2.1 位运算 位运算符如表5-2所示&#xff1a; 运算符 作用 示例 & 按位与 两个操作数同时为1&#xff0c;结果为1&#xff1b; | 按位或 两个操作数只要有一个为1&#xff0c;结果就为1&a…

【lesson38】让minishell支持重定向

文章目录 minishell支持重定向minishell完整代码 minishell支持重定向 支持重定向的核心逻辑&#xff1a; 1.分析字符串是否含有重定向的符号&#xff0c;并且提取文件名。 #define INPUT_REDIR 0 //输入重定向 #define OUTPUT_REDIR 1 //输出重定向 #define APPEND_REDIR…

ROS方向第二次总汇报

文章目录 1.本阶段学习内容&#xff1a;2.过程中遇到的问题及解决方法&#xff1a; 本篇链接:https://blog.csdn.net/m0_54470078/article/details/136019940?spm1001.2014.3001.5501 本人主页::https://blog.csdn.net/m0_54470078?spm1011.2124.3001.5343 1.本阶段学习内容&…

使用Rsync软件工具将Linux服务器上的文件同步到Windows 服务器

使用Rsync软件工具将linux服务器上的文件同步到Windows 服务器 测试环境&#xff08;推送&#xff1a;Linux 推送到Windows&#xff09;&#xff1a; Windows 服务器&#xff1a;172.20.26.97 Linux服务器&#xff1a;172.20.26.34 一、在172.20.26.97上安装cwRsyncServer-v…