【RxJava】走进RxJava 从关键类开始

从零开始的RxJava2.0教程(一)基础 1. 为什么写这篇文章RxJava这些年越来越流行,而上月末(2016.10.29)发布了2.0正式版,但网上大部分关于RxJava的教程都是1.x的。关于2.0的教程基本是介绍1.x和2.x的区别,对于RxJava的老用户来说,自然看看和1.x的区别就大致会用了,但是对于新手来说,就不得不先学1.x。这样来说,学习成本就提高了,本身RxJava就不容易上手。为了让年轻的司机可以直接从2.0开始学习 阅读详情

我们知道RxJava是基于观察者模式的,所以其核心类肯定有被观察者 Observable 用于发射数据; 观察者Observer 用于接收处理数据;还有一个特殊的Subject 是 Observable 的一个扩展,同时还实现了 Observer 接口Subject同时作为观察者和 被观察者,可以用来转发事件,当做 Rx 中的 事件管道。

  • class rx.Observable< T>
  • interface rx.Observer< T>
  • abstract class rx.subjects.Subject< T, R>

maven工具引入rxJava

<!-- https://mvnrepository.com/artifact/io.reactivex/rxjava -->
<dependency>
    <groupId>io.reactivex</groupId>
    <artifactId>rxjava</artifactId>
    <version>1.2.6</version>
</dependency>

Observable

创建被观察者 发射数据

    //Observable 发射数据
    Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> t) {//t 作为一个订阅者(观察者)
            t.onNext("hello");//这里会触发所有订阅者的onNext()函数
            t.onCompleted();
            //一个事件流结束(onError 或者 onCompleted 都会导致事件流结束)后就不会发射任何数据了。
            //t.onError(new Throwable("sry,there is something wrong!"));
        }
    });

observer

再创建一个观察者 接受处理数据

    //Observer 观察者  接受处理数据
    Observer<String> observer = new Subscriber<String>() {
        @Override
        public void onCompleted() {
            System.out.println("onCompleted");
        }
        @Override
        public void onError(Throwable e) {
            e.printStackTrace();
        }
        @Override
        public void onNext(String t) {
            System.out.println("onNext");
            System.out.println("t:" + t);
        }
    };

确定观察者与被观察者之间的关系

    observable.subscribe(observer);//这里确定关系

输出:

observer:from observable
observer:onCompleted

Subject

Subject 是 Observable 的一个扩展,同时还实现了 Observer 接口,可以把 SubjectSubject 同时作为观察者和 被观察者,可以用来转发事件,当做 Rx 中的 事件管道。

    //Subject = Observable + Observer
    Subject<String, String> subject = new Subject<String, String>(new OnSubscribe<String>(){
        @Override
        public void call(Subscriber<? super String> t) {
            t.onNext("from subject");
        }
    }) {
        @Override
        public void onNext(String t) {
            System.out.println("subject:" + t);
        }
        @Override
        public void onError(Throwable e) {
        }
        @Override
        public void onCompleted() {
        }
        @Override
        public boolean hasObservers() {
            return false;
        }
    };
    observable.subscribe(subject);//subject作为观察者
    subject.subscribe(v-> System.out.println("subject:" + v));//subject作为被观察者

输出

subject:from observable
subject:from subject

PublishSubject

PublishSubject 是最直接的一个 Subject。当一个数据发射到 PublishSubject 中时,将立刻把这个数据发射到订阅到该 subject 上的所有 subscriber 中。

PublishSubject ps = PublishSubject.create();
ps.onNext(1);
ps.subscribe(System.out::println);
ps.onNext(2);
ps.onNext(3);
ps.onNext(4);

这里的 System.out::println 是JDK1.8之后的 Lambda表达式中的函数引用
输出

2
3
4

ReplaySubject

ReplaySubject缓存所有发射给他的数据。当一个新的订阅者订阅的时候,缓存的所有数据都会发射给这个订阅者。 由于使用了缓存,所以每个订阅者都会收到所有的数据。

ReplaySubject rs = ReplaySubject.create();
rs.onNext(0);
rs.subscribe(v -> System.out.println("A:" + v));
rs.onNext(1);
rs.onNext(2);
rs.subscribe(v -> System.out.println("B:" + v));
rs.onNext(3);

输出

A:0
A:1
A:2
B:0
B:1
B:2
A:3
B:3

BehaviorSubject

BehaviorSubject 只保留最后一个值。 等同于 ReplaySubject 的限制个数为 1 的情况。在创建的时候可以指定一个初始值,这样可以确保党订阅者订阅的时候可以立刻收到一个值。

BehaviorSubject bs = BehaviorSubject.create();
bs.onNext(0);
bs.onNext(1);
bs.subscribe(v-> System.out.println("A" + s));
bs.onNext(2);
bs.subscribe(v-> System.out.println("B" + s));

输出

A1
A2
B2

AsyncSubject

AsyncSubject 也缓存最后一个数据。区别是 AsyncSubject 只有当数据发送完成时(onCompleted 调用的时候)才发射这个缓存的最后一个数据。可以使用 AsyncSubject 发射一个数据并立刻结束。

AsyncSubject as = AsyncSubject.create();
as.onNext(0);
as.onNext(1);
as.subscribe(s-> System.out.println("A" + s));
as.onNext(2);
as.onNext(3);
as.onCompleted();

输出

A3

从零开始学习 RxJava:移动开发必备技能 在移动开发的世界里,我们经常会遇到需要处理异步操作、事件流的情况。比如从网络获取数据、处理用户的点击事件等。RxJava 就是为了解决这些问题而诞生的强大工具。本文的目的就是帮助大家全面了解 RxJava,从最基础的概念到实际的项目应用,让大家掌握这一移动开发必备技能。我们会涵盖 RxJava 的核心原理、操作符的使用、如何在 Android 等移动开发环境中运用等内容。本文将按照以下结构展开:首先介绍 RxJava 的核心概念,通过故事和生活实例让大家轻松理解; 阅读详情

相关推荐

RxJava笔记

我们介绍RxJava中的线程切换主要是通过subscribeOn和observeOn操作符展开,对于线程切换Android中主要是子线程与主线程,在我们使用RxJava时会同步引入RXAndroid的包,为什么要同步引入RxAndroid的包呢,主要还是互相补充的原因,因为RxAndroid的包中包含的是Android特性的一些功能实现。RxJAVA也就完成了80%的内容,RxAndroid来补充了剩余的20%的实现。// 依赖RxAndroid 2X 的依赖库// 增加RxJava 2X 的依赖库。

DonnyCoy 995

RxJava安装与使用

RxJava: Reactive Extensions for the JVM RxJava是Reactive Extensions的Java VM实现:一个通过使用可观察序列编写异步和基于事件的程序的库。 它扩展了观察者模式,以支持数据/事件序列,并添加了操作符,允许您以声明的方式将序列组合在一起,同时抽象出对底层线程、同步、线程安全和并发数据结构等问题的关注。 Version 3.x (Javadoc) -单一依赖:Reactive-Streams Java 8+ (Android desugar f

API搬运工 1064

RxJava 1.3.0 jar

RxJava 1.3.0 jar,用于搭建最小的RxJava运行环境。运行JDK要求Java 8 以上。

Rxjava2 介绍与详解实例

Rxjava介绍

JiangMing-JIM的博客 1370

东方财富API隐藏技巧:这样获取分时均价线数据更稳定(避坑指南)

本文深入解析东方财富API获取股票分时数据,特别是分时均价线的实战技巧与避坑指南。针对高频调用中常见的请求失败、数据错位及IP限制等问题,提供了从接口参数深层解析、稳健请求与错误处理机制,到系统优化与数据校验的全流程解决方案,帮助开发者构建稳定可靠的数据采集系统。

rice5的博客 2523

【SAM2系列】windows单GPU复现时的bug解决记录

windows运行sam2,就感觉在开一艘破破烂烂的船,每走一步报一个错,bug源源不断的冒出来😭😭😭😭😭。

weixin_43571113的博客 1317

RxJava学习入门1.基本概念和常用的创建操作符

RxJava学习入门1.基本概念和常用的创建操作符一、简介1. RxJava的一些优势:2. 几个重要的概念(1) 观察者: Observer(2) 被观察者: 触发事件并决定什么时候发送事件的主要角色。(3) 订阅:观察者和被观察者建立关联3. 六大类操作符二、 创建操作符1. 创建demo项目2. 创建操作符示例3. 消费者4. just 操作符5. fromArray操作符,类似于just,但数组不受10个限制6. fromIterable 迭代器操作符7. fromFuture操作符8. fromC

猿来这样-谢厂节的博客 2567

【TCGA-CRC】TCGA数据读取

本文介绍了如何从TCGA数据库中处理结肠癌(COAD)和直肠癌(READ)的RNA测序数据。首先,通过data.table::fread函数读取基因表达量文件,并检查基因ID和基因名称的一致性。接着,批量读取所有样本的TPM(Transcripts Per Million)数据,并将其合并为表达矩阵。随后,通过匹配样本ID和文件名,确保表达矩阵的列名与样本ID一致。最后,筛选出编码蛋白质的基因,并将处理后的数据保存为Rdata文件。整个过程涉及数据读取、合并、匹配和筛选,为后续的基因表达分析提供了基础。

小八四爱吃甜食的博客 662

RxJava 从入门到出轨

RxJava:https://github.com/ReactiveX/RxJava 前言 RxJava 概念初步理解 作用 - 异步 模式 - 观察者模式 结构 - 响应式编程 优势 - 逻辑简洁 RxJava 依赖 RxJava 入门 事件产生 事件消费 不完整定义回调 入门示例 RxJava 进阶 Scheduler线程控制 变换 map操作符 flatMap操作符 RxJava 其他常用操作

LeBron_Six的专栏 2万+

Ubutntu下使用realsense d435i(二):获取某二维像素点的三维坐标

00 准备工作 准备工作包括安装驱动以及pyrealsense2,具体可参考上一篇: Ubutntu下使用realsense d435i(一):准备工作以及安装pyrealsense2 https://blog.youkuaiyun.com/gyxx1998/article/details/121461293 01 通过二维像素点获得物体三维坐标 这个在上一篇已经介绍了代码: realsense d435i获取某像素点三维坐标(计算深度和点云两种方法) https://blog.youkuaiyun.com/gyxx1998/

gyxx1998的博客 9943

ENVI 5.3与IDL 8.5安装指南:从下载到激活的完整流程

本文提供了一份详细的ENVI 5.3与IDL 8.5安装教程,涵盖从获取安装包、运行主程序、安装许可证到关键文件替换的完整流程。指南重点解决了激活过程中的常见问题,并分享了个人实践经验,旨在帮助用户,特别是遥感图像处理初学者,一次性顺利完成软件部署,为后续的科研与开发工作奠定基础。

weixin_29213827的博客 545

RxJava 搭建运行环境

1、环境: eclipse 4、Java 8RxJava使用了一些Java 8 的特性,因此必须使用Java 8。 RxJava也可以用在Java 8之前的jdk版本,但是需要额外的配置。2、RxJava版本的选择RxJava目前最新版本是 1.3.0,在今年(2017年)9月1日会发布 1.4.0版本。 RxJava还有一个并行的版本,是2.x。 目前2.x版本的最新发布是2.1.1版本。

王洪伟的专栏 1888

ABB AC500 系列 PLC 与上位机iFix 的通讯配置

在 软件中,有 3 种方式可以进入 IP config tool 的配置界面 双击 IP_settings,点击 IP config tool,即可进入 IP config tool 界面点击菜单栏的 Tool→IP config如果单独安装了 ABB IP Configration,则可以通过开始→程序→ABB→ABB IPConfigration 启动 IP 配置工具启动 IP config tool 后,即可进入 IP 配置界面。

xdpcxq的专栏 4030

rxjava几个关键类的类图

乘风破浪 1823

LeRobot 入门教程(七)数据集

LeRobot Dataset v3.0 是机器人学习数据的标准化格式,支持多模态时间序列数据和视频的统一访问。该版本通过基于文件的存储(Parquet/MP4)、关联元数据和Hub原生流式处理等新特性,显著提升了性能并降低了存储开销。文档详细介绍了格式设计、安装使用、数据记录与加载方法,以及从v2.1迁移到v3.0的步骤,特别针对大型数据集(如DROID 1.0.1)的处理提供了SLURM集群移植方案。v3.0通过优化文件组织和元数据管理,实现了更快的加载速度、更高的内存效率和更好的可扩展性。

2506_90492529的博客 2052

基于Jeecgboot3.9.0的flowable7.2.0流程增加一个OA请假单功能例子(二)

基于Jeecgboot3.9.0的flowable7.2.0流程增加一个OA请假单功能例子(二)

宁波阿成的博客 198

【RxJava】RxJava3核心功能讲解和源码分析

一个是Observable的订阅顺序,一个是doOnSubscribe的执行顺序,Observable的订阅顺序上面已经得出结论了,是从后往前执行的。当没有指定ObserveOn,但是指定了SubscribeOn时,由于onNext代码是从最上游的Observable.subscribeActual开始的,所以所有的onNext都会在最近一个SubscribeOn指定的线程中执行。reduce:将上游Observable的相邻两个数据进行运算,再拿结果与下一个数据进行运算,如此循环,得到一个最终值。

天天向上 Up Up Up (*^▽^*) 2378

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

小白学习Rxjava2,从零开始到实战(一) RxJava2的基础使用

前言 小白学习之我见 正文 导入Rxjava2 Rxjava2的简单使用 总结前言RxJava是什么? RxJava 在 GitHub 主页上是这样说的 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 Java VM 上使用可

lwlizhe的博客 3154

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

从0开始手撸一个RxJava响应式编程框架

/被观察者//观察者有喜欢搞事的小伙伴可能会发现,这不对啊,你是不是骗我,你这个观察者不是类,而是个接口啊。哎呀,行骗被发现了,赶紧逃~其实也没有骗你,你想想,我们平常在使用RxJava的时候,是怎么使用的?Java中是不是需要new一个匿名内部类,Kotlin中则需要定义一个object实现接口。没错,观察者就是采用接口的。为什么要这么做?你想,观察者收到被观察者的通知以后是不是需要做一些改变,RxJava根本不知道你要做哪些改变啊,所以做成接口,你自己来实现。

2401_89317507的博客 985

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

从零开始的RxJava2.0教程(四)在安卓中的应用

1. 前言在第1 2 3篇中,我介绍了RxJava 2.0的基本用法。这一篇将介绍在安卓中的基本用法。 附上本系列教程的链接。 从零开始的RxJava2.0教程(一)基础 从零开始的RxJava2.0教程(二)操作符 从零开始的RxJava2.0教程(三)响应式的好处2. RxAndroidRxAndroid是RxJava针对Android平台的扩展库。曾几何时,RxAndroid确实提供了

宇不语的博客 1万+

Android之Rxjava2.X 1————Rxjava概述

Android之Rxjava2.X 1————Rxjava概述 一.目录 Android之Rxjava2.X 1————Rxjava概述 一.目录 二.前言 三.Rx的概述 1.Rx介绍 2.Rx的特点 四.函数响应式编程 1.响应式编程 2.函数响应式编程 五.Rxjava的原理 1.扩展的观察者模式 2.Rxjava的观察者模式流程 六.Rxjava的基本使用 1. 分步...

冰炭不投day的博客 1425

RxJava 线程切换流程

RxJava 线程切换流程 在客户端开发中有些时候需要多线程切换 作为Android开发者中最经典的模型是Handler+Looper+Message,这种写法稍有不慎会有内存泄漏的风险,后出了RxJava+RxAndroid 因为使用Rxjava切换线程比较简单,而且不容易出现令人讨厌的Casher。所以本人看了一下RxJava切换线程源码过程。本文章适合有一定基础的读者,只做关键代码解读。 先上一段简单的Demo 直接戳进create RxJavaPlugins 里的大部分方法都是工具类,可以不需要

zhujie_的博客 2183

RxJava 2

1.前言 本着更好的使用Rxjava 的心理看了部分Rxjava的部分源码,写一点自己的理解,主要是说 Observable的create()和subscribe()调用时发生了什么,也不关注线程调度(以后再说..)。 2.主要类介绍 Observable 被观察者 抽象类 ObservableOnSubscribe 功能性接口 订阅完成时回调并带回一个Emitter Emitter...

zyawei的博客 676

推荐文章:掌握RxJava3,从这个安卓实例项目开始!

推荐文章:掌握RxJava3,从这个安卓实例项目开始! 在安卓开发领域,响应式编程凭借其强大的异步处理和数据流管理能力,逐渐成为不可或缺的技能。对于那些正准备迁移到RxJava 3或初学者而言,【RxJava3-Android-Examples】项目是一个不容错过的宝藏库。 项目介绍 由Amit Shekhar精心打造的RxJava3-Android-Examples,旨在通过丰富实例让你无缝接...

gitblog_00111的博客 984

RXJAVA从入门到精通

一文帮你读懂rxjava

qq_50709355的博客 4679

Android RxJava:这是一份RxJava使用入门学习指南

即 开厨房 - 确定对应菜式Next事件、Complete事件 &Error事件。具体如下:具体实现// 1. 创建观察者 (Observer )对象// 2. 创建对象时通过对应复写对应事件方法 从而 响应对应事件// 观察者接收事件前,默认最先调用复写 onSubscribe()@OverrideLog.d(TAG, “开始采用subscribe连接”);

2401_84009192的博客 1457
上一篇: 【设计模式】观察者模式
下一篇: 【Maven】在Eclipse中使用Maven
xiaoping0915
博客等级 码龄12年 158粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值