更贴切的RxJava的入门

2024-02-13 18:50
文章标签 java 入门 rx 贴切

本文主要是介绍更贴切的RxJava的入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

怎么满GitHub的开源项目都是基于RxJava?

最近为了提升自己对代码的理解与阅读能力,在github上面搜索了最近比较火的开源框架,找到地址往下翻后总会看到这样一段话:
网络请求:RxJava & Retrofit+okhttp
这个RxJava和Retrofit是个啥东西?听都没听说过。
懵逼的我马上Google了一下通过一段时间的学习和运用基本有了对其的一些个人理解
明白了为何他们会是现在非常好的网络请求框架广且受开发者们的青睐
下面结合我自己的浅见,向大家分享一下我对这门新技术的理解


什么是RxJava,为什么大家都用他呢

对于我个人而言,RxJava在整个网络框架中担任着异步这一重要的任务,
Retrofit则扮演向服务端请求数据这一角色
同时异步任务它必定有着AsyncTask和Handler不具备的优点
在经过一系列的项目实践之后这个优点更加明显
- 在不断复杂的逻辑之中,它依旧能出淤泥而不染-保持代码的可读性简洁性
Observable.from()
.flatMap(….)
.filter(……)
.map(…)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe
它至上而下为一种链式调用,非常便于我们开发者理解,在逻辑复杂的环境中更加凸显
-响应式编程
安卓中的点击监听器,View在被点击的一瞬间响应事件
客户端在得到服务端返回数据的一瞬间响应操作


在运用之前RxJava你需要掌握

观察者模式

对,就是我们耳熟能祥的设计模式之一———-观察者模式
这里我会以图片的形式重现这一模式,帮助大家理解这种机制的原理
我一直认为代码来源于生活,虽然有一些不贴切,希望大家谅解指正
观察者模式图解

我这里模拟的是前几年经常出现的碰瓷事件(有些不恰当)
那么这个事件中当然有主角和配角
主角-老奶奶 Observable被观察者
配角-围观群众 Observer观察者
-Action-
老奶奶在路上散步
围观群众一直盯着这个老奶奶(高度敏感的监视)看觉得不对劲,走路晃悠悠的
但没人上前询问情况,这时老奶奶在开过来的一辆车接近一米前突然就倒下了
(发生了onPengCi())这时围观群众(反应)有的拿手机拍照(takePhoto()),有的信以为真打电话给警察(callPolice())有的远离现场
-Cut-
这时场景结束了
想必你大约能理解观察者模式的本质了—–对,就是回调
在敏感监视的过程中当被观察者做出动作,这个事件观察者会马上接收到并调用相应的方法

但在上述场景中,你肯定会注意到下面这些细节
1.高度敏感
2.观察者吝啬的活动

这两点便是RxJava所针对此模式所扩展的地方

订阅者模式(扩展的观察者模式,个人见解莫怪)

二话不说,上图
订阅者模式
熟悉的场景再一次显现
这里的不同之处在于
老奶奶倒地之后打了个电话给他儿子(通知观察者)
围观群众里有这时站出来一个人正是他儿子
因为之前与老奶奶商量(签订协议)敲诈这车主一波
他马上上前说老奶奶受伤严重索要赔偿

这里的不同之处,想必大家都明白了
这里以一种注册订阅的理念,取代了繁琐的监视操作更加灵活
能够以响应的姿态使订阅者进入角色
而订阅者的活动更加丰富具体,演技更加到位


RxJava基本使用

在使用之前希望大家能知道下面的基本概念

  • Observer观察者
  • Subscriber订阅者
  • Observable被观察者
  • Scheduler调度器

RxJava的subscribe过程中,Observer 总是会先被转换成一个Subscriber再使用
所以其中都是基于订阅机制实现的

前三个想必大家都知晓了,那么最后一个呢?
Schaeduler调度器,他相当于安卓中的线程控制器
默认RxJava中遵循的是线程不变的原则
即:
在哪个线程调用 subscribe(),就在哪个线程生产事件;
在哪个线程生产事件,就在哪个线程消费事件。

但如果需要切换线程,就需要用到 Scheduler (调度器)。
线程的分类:
Schedulers.immediate()当前线程
Schedulers.newThread()新开线程
Schedulers.io()IO线程 读写文件数据库,请求网络
Schedulers.computation()密集型计算专用
AndroidSchedulers.mainThread()主线程

线程的控制:
subscribeOn() 和 observeOn()
- subscribeOn(): 指定 subscribe() 所发生的线程,即 Observable.OnSubscribe 被激活时所处的线程。或者叫做事件产生的线程。
- observeOn(): 指定 Subscriber 所运行在的线程。或者叫做事件消费的线程。

至此,到了代码阶段,让我们一起实现RxJava最简单的实现吧!

上代码

//1.创建订阅者
Subscriber<String> subscriber = new Subscriber<String>() {@Overridepublic void onNext(String s) {Log.d(tag, "Item: " + s);}@Overridepublic void onCompleted() {Log.d(tag, "Completed!");}@Overridepublic void onError(Throwable e) {Log.d(tag, "Error!");}
};
//2.创建被观察者
Observable observable = Observable.create(new Observable.OnSubscribe<String>() {@Overridepublic void call(Subscriber<? super String> subscriber) {//传入跟他订阅关系的订阅者//被订阅时候调用subscriber.onNext("Hello");subscriber.onNext("Hi");subscriber.onNext("Aloha");subscriber.onCompleted();}
});
//3.签订契约吧少年
observable.subscribe(subscriber);

当订阅之后就会执行被观察者的call方法再回调观察者的实现
这样我们最简单的RxJava用法就完成了!


最后

对于 Android 开发者来说, RxJava 是一个很难上手的库,对于Android新手来说,他更是难以理解,因此我写这篇文章是结合我们的生活来讲述代码,让大家都能听得懂,能给大家一些入门的指引,当然这只是我个人的浅见登不上大雅之堂,无论如何,只要能给各位同为 Android 工程师的你们提供一些帮助,这篇文章的目的就达到了。


关于作者

陈鸿(大四在校学生,目前寻找实习中)
QQ:568261070
GitHub:https://github.com/MrCodeSniper

这篇关于更贴切的RxJava的入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/706347

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定