Android rxjava

server/2024/12/21 19:56:14/

一.简介

RxJava是ReactiveX在JVM上的一个实现,ReactiveX使用Observable序列组合异步和基于事件的程序的库;是一个基于事件流、实现异步操作的库。RxJava在Java环境下使用,它通过Observable(可观测对象)和Subscriber(订阅者)来实现异步编程模型。Observable可以发射出一系列的数据流,而Subscriber则负责处理这些数据流。利用各种操作符,我们可以对数据流进行变换、过滤、合并等操作,从而完成复杂的异步任务。 

rx == 反应式  reactivex == 响应式编程:根据上一层的响应影响下一层的变化

Observable被观察者理解为起点,Observer观察者理解为终点,通过Subscribe连接两者

二、简单使用

1.bulid.gradle

implementation 'io.reactivex.rxjava3:rxandroid:3.0.2'
// Because RxAndroid releases are few and far between, it is recommended you also
// explicitly depend on RxJava's latest version for bug fixes and new features.
// (see https://github.com/ReactiveX/RxJava/releases for latest 3.x.x version)
implementation 'io.reactivex.rxjava3:rxjava:3.1.5'

2.使用rxjava下载网络图片

// 网络图片的链接地址private final static String PATH = "https://pixiv.re/103070121.jpg";public void showImage() {//第二步//起点Observable.just(PATH)//第三步//图片下载需求.map(new Function<String, Bitmap>() {@Overridepublic Bitmap apply(String path) throws Throwable {try {Thread.sleep(2000);URL url = new URL(path);//建立网络连接对象HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();httpURLConnection.setConnectTimeout(5000);int response = httpURLConnection.getResponseCode();if (response == HttpURLConnection.HTTP_OK) {InputStream inputStream = httpURLConnection.getInputStream();Bitmap bitmap = BitmapFactory.decodeStream(inputStream);return bitmap;}} catch (Exception e) {e.printStackTrace();}return null;}})// 加水印.map(new Function<Bitmap, Bitmap>() {@Overridepublic Bitmap apply(Bitmap bitmap) throws Throwable {Paint paint = new Paint();paint.setColor(Color.RED);paint.setTextSize(10);Bitmap syBitmap = drawTextToBitmap(bitmap,"pixiv",paint,50,10);return syBitmap;}})// 日志记录需求.map(new Function<Bitmap, Bitmap>() {@NonNull@Overridepublic Bitmap apply(@NonNull Bitmap bitmap) throws Exception {Log.e("TAG", "什么时候下载了图片 apply: " + System.currentTimeMillis());return bitmap;}})//图片下载操作分配异步线程.subscribeOn(Schedulers.io())//终点分配Android主线程.observeOn(AndroidSchedulers.mainThread()).subscribe(//终点new Observer<Bitmap>() {//第一步//订阅成功@Overridepublic void onSubscribe(@NonNull Disposable d) {layout.setVisibility(View.VISIBLE);}//第四步 显示图片@Overridepublic void onNext(@NonNull Bitmap bitmap) {image.setImageBitmap(bitmap);}//异常@Overridepublic void onError(@NonNull Throwable e) {}//第五步 结束@Overridepublic void onComplete() {if (progressDialog != null) {layout.setVisibility(View.GONE);}}});}

个人理解太浅,详细使用请参考:

Rxjava3文档级教程一: 介绍和基本使用-CSDN博客

How To Use RxJava · ReactiveX/RxJava Wiki (github.com)

ReactiveX/RxJava: RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM. (github.com)

Observer (RxJava Javadoc 3.1.8) (reactivex.io)


http://www.ppmy.cn/server/1705.html

相关文章

(金融会计领域)普通最小二乘法回归得到的β值构建KV指数

KV指数 参考 Kim 和 Vemrecchia(2001)的方法&#xff0c;采用 KV 指数来衡量中潜股份的信息披露质量。该方法通过股票收益率对交易量的回归系数来衡量信息披露质量&#xff0c;其原理在于&#xff0c;上市公司的信息披露质量越低&#xff0c;股票收益率对交易量的依赖程度越高&…

上线流程及操作

上节回顾 1 搜索功能-前端&#xff1a;搜索框&#xff0c;搜索结果页面-后端&#xff1a;一种类型课程-APIResponse(actual_courseres.data.get(results),free_course[],light_course[])-搜索&#xff0c;如果数据量很大&#xff0c;直接使用mysql&#xff0c;效率非常低--》E…

【论文阅读】TransGNN

一、摘要 本文主要是在推荐系统中对GNN的改进。在协同过滤中&#xff0c;主要是对用户-项目交互图进行建模。但是基于GNN的方法遇到了有限的接受域和嘈杂的“兴趣无关”连接的挑战。相比之下&#xff0c;基于Transformer的方法擅长于自适应地和全局地聚合信息但是在大规模交互…

RUST语言之引用与借用

1.通过参数形式使用引用 调用函数并传入引用 //String::from会分配内存来存储RUST语言参考与借用//然后将s指针指向这块内存地址let mut sString::from("RUST语言参考与借用");println!("{}",s);//调用自定义函数并传入引用let x reftest(&mut s);//…

pnpm 报错: ERR_PNPM_META_FETCH_FAIL

今天突然遇到一个报错&#xff0c;pnpm 报错&#xff1a; ERR_PNPM_META_FETCH_FAIL  GET https://registry.npm.taobao.org/vue%2Fcli-service: request to https://registry.npm.taobao.org/vue%2Fcli-service failed, reason: certificate has expired问题原因&#xff1a;…

爬虫 | 垃圾处理设施数据的获取与保存

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本项目通过发送网络请求&#xff08;requests&#xff09;&#xff0c;从指定的 URL 获取垃圾处理设施的相关数据&#xff0c;并将数据保存到 CSV 文件中&#xff0c;以供后续分析和利用。 目录 一、项目结构 二、详细说明 三…

【Linux】进程的优先级环境变量

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. 进程的优先级2.1 什么是优先级2.2 为什么要有优先级2.3 优先级的查看方式2.4 对优先级调整 3. 命令行参数4. 环境变量4.1 环境变量与配置文件4.1.1 环境变量初步介绍4.1.2 配置文件 4.2 更多环境变量4.3 整…

C++力扣Leetcode算法4--排序算法

目录 快速排序--递归 归并排序--递归 插入排序 冒泡排序 选择排序 215 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 347. 前 K 个高频元素 快速排序--递归 void quick_sort(vector<int> &nums, int l, int r) {if (l 1 > r) …