Android rxjava

news/2024/12/31 1:09:40/

一.简介

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/news/1424517.html

相关文章

Android之图片压缩几种方式

大概可以分为以下几类&#xff1a;更换图片格式&#xff0c;质量压缩&#xff0c;采样率压缩&#xff0c;缩放压缩&#xff0c;调用jpeg压缩等 1.设置图片格式 Android目前常用的图片格式有png&#xff0c;jpeg和webp&#xff0c; png&#xff1a;无损压缩图片格式&#xff0…

代码随想录算法训练营第三十六天| 435.无重叠区间、763.划分字母区间、56.合并区间

系列文章目录 目录 系列文章目录435. 无重叠区间贪心算法按左边界排序&#xff08;与【452. 用最少数量的箭引爆气球】思路差不多&#xff09; 763.划分字母区间贪心算法①将字符串映射到哈希数组&#xff0c;用二维数组记录每个字母存在的区间&#xff0c; 转化为重叠区间问题…

Rust 语言使用 SQLite 数据库

SQLite 是一种广泛使用的轻量级数据库&#xff0c;它通过简单的文件来承载数据&#xff0c;无需复杂的服务器配置。正因如此&#xff0c;它成为了许多桌面和移动应用的首选数据库。在 Rust 生态中&#xff0c;rusqlite 库为开发者提供了操作 SQLite 数据库的简洁且有效的方法。…

Python 编程必备技能:解包。简化代码,提高效率

在 Python 中&#xff0c;解包&#xff08;Unpacking&#xff09;是指将一个序列&#xff08;列表、元组等&#xff09;或字典中的元素解开&#xff0c;分别赋值给多个变量的过程。解包可以方便地将序列或字典中的元素分别取出来&#xff0c;用于后续的处理和操作。 在 Python…

深入了解MindOpt优化求解器的License服务

在商业和研究领域&#xff0c;高效的数学优化求解器是解决复杂问题的关键工具。MindOpt求解器以其卓越的性能和广泛的应用场景成为众多专业人士的首选。但在享受其强大功能的同时&#xff0c;了解和选择合适的License服务是至关重要的。本篇博客将详细介绍MindOpt优化求解器的L…

python/pygame 挑战魂斗罗 笔记(二)

一、建立地面碰撞体&#xff1a; 现在主角Bill能够站立在游戏地图的地面&#xff0c;是因为我们初始化的时候把Bill的位置固定了self.rect.y 250。而不是真正的站在地图的地面上。 背景地图是一个完整的地图&#xff0c;没有地面、台阶的概念&#xff0c;就无法通过碰撞检测来…

MacOs 安装thrift-0.5.0

下载thrift-0.5.0.tar.gz https://archive.apache.org/dist/incubator/thrift/0.5.0-incubating/ 安装thrift 解压&#xff1a;tar -zvxf thrift-0.5.0.tar.gz 进入解压目录&#xff1a;cd thrift-0.5.0 编译命令&#xff1a;./configure --prefix/usr/local/ --with-boo…

Hadoop 3.1.3

第1章 Hadoop概述 1.1 Hadoop是什么 1.2 Hadoop发展历史&#xff08;了解&#xff09; 1.3 Hadoop三大发行版本&#xff08;了解&#xff09; Hadoop三大发行版本&#xff1a;Apache、Cloudera、Hortonworks。 Apache版本最原始&#xff08;最基础&#xff09;的版本&#x…