【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.hqwc.cn/news/451400.html

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

相关文章

【C++】类和对象之运算符重载(三)

前言&#xff1a;在前面我们知道在类和对象中有六个默认成员函数&#xff0c;并学习了其中三个构造函数、析构函数、拷贝构造函数&#xff0c;今天我们将进一步的学习.赋值运算符重载。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质…

【API接口】制造企业,电商API接口面临的一道难题——数据采集

数据采集一直是困扰着所有制造工厂的传统痛点&#xff0c;自动化设备品牌类型繁多&#xff0c;厂家和数据接口各异&#xff0c;国外厂家本地支持有限&#xff0c;不同采购年代。即便产量停机数据自动采集了&#xff0c;也不等于整个制造过程数据都获得了&#xff0c;只要还有其…

计算机网络_1.6.2 计算机网络体系结构分层的必要性

1.6.2 计算机网络体系结构分层的必要性 一、五层原理体系结构每层各自主要解决什么问题1、物理层2、数据链路层3、网络层4、运输层5、应用层 二、总结三、练习 笔记来源&#xff1a; B站 《深入浅出计算机网络》课程 本节主要介绍实现计算机网络需要解决哪些问题&#xff1f;以…

【XR806开发板试用】TCP通信测试 Ping 命令测试

1.工程准备 由于要使用wifi功能&#xff0c;直接从wlan_demo复制一份出来&#xff0c;然后修改。 源文件只留下 main.c 就可以了。 BUILD.gn文件 import("//device/xradio/xr806/liteos_m/config.gni")static_library("app_mying") {configs []sources…

LeetCode 热题 100 | 链表(中下)

目录 1 19. 删除链表的倒数第 N 个节点 2 24. 两两交换链表中的节点 3 25. K 个一组翻转链表 4 138. 随机链表的复制 菜鸟做题第三周&#xff0c;语言是 C 1 19. 删除链表的倒数第 N 个节点 到底是节点还是结点。。。 解题思路&#xff1a; 设置双指针 left 和 ri…

堪称灾难级攻击的 UDP FLOOD洪水攻击,应该如何防护?

DDOS又称为分布式拒绝服务&#xff0c;全称是Distributed Denial of Service。DDOS本是利用合理的请求造成资源过载&#xff0c;导致服务不可用&#xff0c;从而造成服务器拒绝正常流量服务。就如酒店里的房间是有固定的数量的&#xff0c;比如一个酒店有50个房间&#xff0c;当…

列式数据库、行式数据库简介

列式数据库、行式数据库简介 1、数据准备2、行式数据库3、列式数据库4、行式、列式存储对比 常见的行式数据库有Mysql&#xff0c;DB2&#xff0c;Oracle&#xff0c;Sql-server等&#xff1b;列数据库&#xff08;Column-Based&#xff09;数据存储方式按列存储&#xff0c;常…

ESU毅速丨3D打印技术引领模具制造创新革命

随着科技的飞速发展&#xff0c;3D打印技术已经成为制造业的新宠。而在模具制造领域&#xff0c;3D打印技术更是带来了巨大的创新价值&#xff0c;引领着模具制造的革命性变革。 传统模具制造过程中&#xff0c;需要经过多道繁琐工序&#xff0c;而3D打印技术简化了这一过程。3…

MySQL进阶45讲【13】为什么表数据删掉一半,表文件大小不变?

1 前言 有些小伙伴在删数据库数据时&#xff0c;会产生一个疑问&#xff0c;我的数据库占用空间大&#xff0c;我把一个最大的表删掉了一半的数据&#xff0c;怎么表文件的大小还是没变&#xff1f; 那么这篇文章&#xff0c;就介绍一下数据库表的空间回收&#xff0c;看看如…

【实证分析】地级市-资本存量测算结果数据集(含计算公式及原始数据)( 2003-2021年)

该数据为地级市资本存量测算&#xff08;2003-2021年&#xff09;&#xff0c;提供了中国地级市在该期间内资本存量的详细测算结果&#xff0c;包括两种基于2011年和2006年基期的测算方式。该数据集利用了从城市统计年鉴和中国统计年鉴获取的固定资产投资数据及其增速&#xff…

【React】react组件传参、redux状态管理

【React】react组件传参、redux状态管理 一、props&#xff1a;父组件向子组件传参1、将普通的参数作为props传递2、将jsx作为props传递&#xff08;组件插槽&#xff09;&#xff08;1&#xff09;基础功能示例&#xff08;2&#xff09;进阶示例 二、自定义事件&#xff1a;子…

geoserver发布tif影像,关于黑边的问题

一、tif格式 支持发布GeoTIFF格式的发布的tif格式&#xff0c;无法去除tif的黑边发布的tif格式文件不能过大 二、ImageMosaic 可以发布比较大的tif文件可以去除黑边 设置后图层&#xff0c;进行访问就发现没有黑边了 三、可以直接到图层模块&#xff0c;通过图层名称进入图层…