rxjava系列(一)-- 初识Rxjava

RxJava观察者模式详解:如何优雅处理异步数据流(含代码示例) 本文深入解析RxJava如何基于观察者模式优雅处理异步数据流。通过详解Observable创建、操作符组合、线程调度及错误处理,并结合实战代码示例,展示了如何用声明式编程替代回调地狱,构建清晰、健壮的异步数据管道。 阅读详情

rxjava是一个使用观察者序列实现的基于事件的异步响应库。

笔者rxjava总结基于rxjava1,rxjava2相比于rxjava1变动还是蛮大的。引入rxjava1:

compile 'io.reactivex:rxjava:1.3.0'

1.我对rxjava的理解

这里写图片描述

与其说rxjava是一个响应式异步操作库,我更愿意将之理解为一种响应式编程的思想,它打破了我们流程式编码的习惯。
对于Android开发人员来说,异步操作以及回调的思想都不陌生。View的点击事件绑定,网络请求数据的回调等等,通常我们都使用接口的方式实现异步方法的回调。rxJava就是针对异步事件的响应式编程库,可以很好的解决Android编码中异步事件的监听处理,这也是为什么rxJava系列的库能在Android领域如此火爆。

2.我对rxjava的总结

在学习使用rxJava过程中会遇到很多阻碍,首先我们需要理解响应式编程思想,说白了就是Android中的回调;其次我们要了解观察者模式,也就是被观察者要在数据或业务变更的时候通知其绑定的所有观察者,观察者就可以实时的监听被观察者的动向。网上学习rxJava的文章也很多,我这里并不想对Rxjava的所有知识进行总结,我只是完全从应用的角度出发去理解rxjava。
学习rxJava首先需要搞懂3个概念:

  • Observable,被观察者。也就是事件源,被观察者的行为变更才会引起观察者的回调监听;
  • Subscriber,观察者。当被观察者行为变更的时候,其观察者会执行监听方法。
  • subscribe,订阅动作。//被观察者订阅观察者.被观察者告诉观察者发生变化了,观察者执行对应的方法。(注:可能刚开始理解会有点别扭,但是站在代码角度,你会非常好理解。代码并不具备主观能动性,因此代码通过被观察者中的观察者去发布相应的事件来实现其回调方法的监听)

这里写图片描述

3.实例

实例一

下面代码是最简单直接的Rxjava的使用。

public static void main(String[] args){

        //创建一个被观察者
        Observable<String> strObservable = Observable.create(
                new Observable.OnSubscribe<String>() {
                    @Override
                    public void call(Subscriber<? super String> subscriber) {
                        subscriber.onNext("Hello world!");
                        subscriber.onCompleted();
                    }
                });

        //观察者
        Subscriber<String> mySubscriber = new Subscriber<String>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String o) {
                System.out.println(o);
            }
        };

        strObservable.subscribe(mySubscriber);//被观察者订阅观察者.被观察者告诉观察者发生变化了,观察者执行对应的方法
    }

创建被观察者,观察者,二者进行绑定。创建被观察者的时候会执行其Call方法,Call方法中持有被观察者中拥有的观察者对象;Rxjava中观察者都会有onCompleted()、onError()、onNext()方法;这样,当被观察者订阅观察者的时候,被观察者会执行其call方法,call方法中我简单的进行了观察者方法的调用,这样就会执行观察者的对应方法。

实例二

具体使用中,我们很少会用上面的流程去进行实现(毕竟看上去太啰嗦,不但没有简化代码,反而使代码看起来复杂了很多)。

private void test1(){
        //创建一个被观察者,just方式创建
        Observable<String> strObservable = Observable.just("Hello world!");

        //观察者,Action是继承Subscriber的
        Action1<String> action1 = new Action1<String>() {
            @Override
            public void call(String s) {
                System.out.print(s);
            }
        };

        strObservable.subscribe(action1);//被观察者订阅观察者.被观察者告诉观察者发生变化了,观察者执行对应的方法
    }

这里我们简化了被观察者对象和观察者对象的创建。Rxjava提供了多种方式创建观察者和被观察者对象,我们通常用just()方法去创建被观察者,用Action1替换观察者(其实Action1是继承了Subscriber,为了简化代码我们通常用Action1)。

实例三

我们继续对上面的代码进行简化

private void test2(){
        Observable.just("Hello world!")
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        System.out.println(s);
                    }
                });
    }

这才是Rxjava的正确打开方式有木有。

实例四

前面被观察者的事件源都是字符串数据,我们希望传递其他数据,比如多个字符串:

 /**
     * just 发送多个T,Subscriber会依次处理
     */
    private void test3(){

        Observable.just("wang","jie")
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        System.out.println(s);
                    }
                });

    }

比如一个list:

    /**
     * from()发送一个集合
     * */
    private void test4(){
        List<String> list = new ArrayList<>();
        list.add("篮球");
        list.add("足球");
        list.add("乒乓球");
        Observable.from(list)
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        System.out.println(s);
                    }
                });
    }

实例五

除此之外,其实Rxjava提供了很多观察者和被观察者的实例化方法供开发者进行使用。下面是一个定时创建被观察者的实例,可用作定时器的实现:

/**
     * .使用interval( ),创建一个按固定时间间隔发射整数序列的Observable,可用作定时器:
     */
    private void test6(){
        Observable.interval(1, TimeUnit.SECONDS)
                .subscribe(new Action1<Long>() {
                    @Override
                    public void call(Long aLong) {
                        System.out.println("每间隔" + aLong + "s发送一次");
                    }
                });
    }

介绍到这里,相信我们对RxJava已经有了一个基础的认识。接下来会继续对rxjava的使用进行分析。

欢迎大家留言讨论。

Java Reactor 入门指南 通过以上的步骤,我们已经了解了如何使用Reactor来执行基本的异步操作。Reactor是一个非常强大的工具,支持多种复杂的异步场景。你可以根据需要添加更多的功能,以满足各种并发需求。希望这篇俏皮可爱的指南对你有所帮助,如果你还有任何疑问,欢迎随时留言哦!😊注意:上面的代码示例是为了教学目的而编写的,实际使用时请根据你的项目环境进行适当的调整。为了给这次的学习之旅增添一点趣味,这里有一张俏皮可爱的程序员正在编写Reactor。 阅读详情

相关推荐

Rxjava源码分析&实践(一)【RxJava的基本使用】

写在文章开头,小编明确,去使用自己已知的知识,结合我们之前讲过的设计模式相关知识,实现某个开源的三方框架,并不是目的,毕竟已有的框架、已有的知识总结一大堆,我们并非是要花费时间重复造轮子,而是借助这个自我实践过程,去进行自我的知识沉淀、累加,进而吃透相应框架,这才是最关键的。当然,也有另外一方面原因,大家发现我们一路走来,从刚开始的设计模式相关课程,到开源框架Eventbus、Butterknife、Rxjava、Okhttp、Glide,这些框架哪个不是很经典的,也许之前你怀疑过自己,但是当依靠自己已有知

itbird的专栏 1034

《RxJava 深度解析:工作原理、核心操作符与高效实践指南》

摘要:RxJava 作为响应式编程的标杆框架,通过灵活的异步数据流处理能力,极大简化了复杂逻辑的开发。本文系统剖析 RxJava 的核心机制与最佳实践: 工作原理:从观察者模式扩展、线程调度到底层背压策略,揭示数据流管理的设计哲学。核心 API 与操作符:详解 Observable、Flowable 等关键类,分类解析创建、转换、过滤、组合及错误处理操作符的用法与适用场景,并附代码示例。

weijiangbc0的博客 1814

NCCL使用指南-进阶篇

前文介绍了NCCL的常用环境变量,本文介绍了NCCL-test性能基准测试,以及一些大规模集群测试的经验数据。

father_yingying的博客 1404

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

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

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

SOC设计必看!Tessent DRC检查中最容易踩的5个坑(附解决方案)

本文针对SOC设计中Tessent DRC检查的常见问题,详细分析了5个最易忽视的陷阱,包括时钟域交叉、扫描链虚连、多电压域规则等,并提供专业解决方案。特别针对芯片设计中的DFT验证难点,分享了经过验证的调试方法和Tessent工具使用技巧,帮助工程师提升DRC检查效率。

weixin_29280657的博客 496

Chronos时间序列预测实战:从零开始微调你的第一个大语言模型(附完整代码)

本文提供了一份详细的Chronos时间序列预测大语言模型微调实战指南。从环境搭建、数据预处理到模型配置与训练,手把手教你如何利用自己的数据微调Chronos模型,并完成评估与部署,助你快速掌握这一前沿技术。

zzz56的博客 300

搞定!从0开始手撸一个RxJava响应式编程框架(3)

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

2301_79098336的博客 806

LightTools宏 vs Python API:光学仿真自动化方案选型指南

本文深入对比了LightTools光学仿真自动化中VBA宏与Python API两种方案。VBA宏内嵌易用,适合固定流程批处理;Python API生态强大,尤其在参数优化算法集成方面优势显著,便于构建复杂工作流。文章结合案例,为不同场景下的技术选型提供清晰指南。

garlic的博客 939

RxJava(一)、初识RxJava

RxJava "是什么,为什么,怎么办”是认识问题的逻辑思维过程,这篇文章也是这样来解释RxJava的 RxJava是什么? RxJava 在 GitHub 主页上的自我介绍是 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 ...

weixin_44270896的博客 431

电商客服效率翻倍!手把手教你用影刀RPA+AI搭建智能回复系统(附实战配置)

本文详细介绍了如何利用影刀RPA+AI技术搭建电商智能客服系统,实现24小时在线回复,大幅提升客服效率。通过零代码配置、Excel词库管理和AI语义理解,系统能处理80%常规咨询,响应速度稳定在3秒内,特别适合中小电商降低成本并提升服务质量。

weixin_42520661的博客 547

基于Active-HDL的HDL设计录入与仿真

作者:毛茏玮 / Saint 掘金:https://juejin.im/user/5aa1f89b6fb9a028bb18966a 微博:https://weibo.com/5458277467/profile?topnav=1&amp;wvr=6&amp;is_all=1 GitHub:github.com/saint-000 优快云: https://me.youkuaiyun.com/qq_4053...

一个会写代码的烤鸭 7780

初识RxJava

初识RxJava一、什么是RxJava?官方解释:a library for composing asynchronous and event-based programs using observable sequences for the Java VM(一个在Java VM上使用可观察序列来组成异步的、基于事件的程序的库)简言之:异步二、RxJava的有什么好处?能实现异步的有Handler、

anwanfei的博客 400

27、超声成像技术与原理全面解析

本博客全面解析了超声成像技术与原理,涵盖声学材料特性、超声成像系统的基本概念与组成、关键技术如多普勒和聚焦技术、超声换能器的设计与原理、图像处理方法、系统校准与质量控制,以及超声成像的应用领域和发展趋势。旨在为医学诊断、工业检测和海洋声学等领域的研究人员和工程师提供深入的技术参考和指导。

z2a3b4c5d的博客 489

RxJava再学习系列一

Android学习是一条漫长的道路,我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。人生不可能一帆风顺,有高峰自然有低谷,要相信,那些打不倒我们的,终将使我们更强大,要做自己的摆渡人。资源持续更新中,欢迎大家一起学习和探讨。《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

2401_84132723的博客 894

【运动规划算法项目实战】全覆盖分区算法

全覆盖规划在机器人学领域具有重要意义,其应用场景涵盖了自动农场、扫地机器人、扫描监视无人机等多个领域。该问题的核心目标是使机器人能够从指定起点出发,规划一条避开障碍物、同时路径尽可能短的轨迹,从而实现对特定区域的全面覆盖。在实际应用中,全覆盖规划的成功实现对于提高机器人在各类环境中的工作效率至关重要。这一问题的解决涉及到高效的路径规划和规划区域分解技术。其中,梯形单元分解算法是一种常用分区的技术,过将地图上需要规划的区域进行分区,采用梯形分解的方式,可以更好地应对复杂环境。全覆盖算法规划流程。

xiewf的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android RxJava系列一: 基础常用详解

前言 本篇主要介绍Rxjava在 Android 项目中的基础使用和常用方法,旨在给对 RxJava 感兴趣的人一些入门的指引.对Rxjava不熟悉的朋友可以去看我之前写的一篇简单介绍 Android RxJava:基础介绍与使用,下面就来我们一起来看看在项目中如何使用 Rxjava 吧! Rxjava是什么?为什么要用Rxjava? 首先我们要知道Rxjava到底是什么东西?为什么这么多人用它...

Darry_R的博客 478

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

RxJava学习一:初识

首先介绍 Github地址:RxJava 、RxAndroid  引入依赖:  compile 'io.reactivex:rxjava:x.y.z'  compile 'io.reactivex:rxandroid:x.y.z'  (版本号是文章发布时的最新稳定版) 部分内容参考:http://blog.danlew.net/2014/09/15/grokking-rxjava-p

Zaker2Magic的博客 498

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RxJava 系列之初识

RxJava 是什么? 一个词:异步。               RxJava 在 GitHub 主页上的自我介绍是 "a library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一个在 Java VM 上使用可观测的序列来组成异步的、基于事

shijianshalou的博客 204

Rxjava和RxAndroid系列(一)

一:什么是RxJava:       RxJava是由Netflix开发的响应式扩展(Reactive Extensions)的Java实现。引用MSDN上对它的定义,Reactive Extensions是这样一个第三方库:它结合了可观察集合和LINQ式查询以达到异步和基于事件的编程效果。Netflix将这个库托管到了Github上,支持Java6以上的版本并且使它可以用于Androi

Justlove_DK的专栏 2811

RxJava系列之一 初识Rxjava

1.简介基础知识响应式代码的基本组成部分是Observables和Subscribers(事实上Observer才是最小的构建块,但实践中使用最多的是Subscriber,因为Subscriber才是和Observables的对应的。)。 Observable发送消息,而Subscriber则用于消费消息。消息的发送是有固定模式的。Observable可以发送任意数量的消息(包括空消息), 当消

jys1115的专栏 1697

Android——初识RxJava

最近在看RxJava,在这里分享一下自己看的一些介绍RxJava不错的文章。 这是RxJava和RxAndroid在Github上的链接: RxJava Github主页:RxJava Github主页 RxAndroid Github主页:RxAndroid Github主页 下面是大头鬼Bruce对RxJava介绍的译文: 1.深入浅出RxJava(一:基础篇) 2.深入浅出RxJ

LCY天上殿的博客 3757

初识Rxjava

Rxjava Rxjava内容很多很深,经过这两天的学习实践,也就稍微理解了点皮毛,写篇文章记录一下学习成果哈哈。 什么是Rxjava,为什么要用Rxjava 晦涩难懂的介绍就不说了,也说不出来。我的理解就是Rxjava是一个和异步操作有关的库。 那么我们可能会很快就提问了,异步操作?那我们可以用 Android 创造的 AsyncTask 和Handler 呀?为什么要用Rxjava呢?这个家伙...

qq_42171948的博客 191
下一篇: rxjava系列(二)-- 强大的操作符
mo_android
博客等级 码龄9年 12粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值