RxJava2.x的理解与总结
RxJava2.x的理解与总结
RxJava是一个基于观察者设计模式将链式编程和异步结合在一起的开源库。
通过查看GitHub开源项目的简介开源知道,RxJava有几个基类。
他们分别适用于不同的场景
io.reactivex.rxjava3.core.Flowableio.reactivex.rxjava3.core.Observableio.reactivex.rxjava3.core.Singleio.reactivex.rxjava3.core.Completableio.reactivex.rxjava3.core.Maybe
上示例代码:
//被观察者
Observable.create(object : ObservableOnSubscribe<String> {
override fun subscribe(emitter: ObservableEmitter<String>) {
emitter.onNext("1")
emitter.onNext("2")
emitter.onNext("3")
emitter.onComplete()
emitter.onComplete()
println("create-Looper:" + (Looper.getMainLooper() == Looper.myLooper()))
}
}).subscribeOn(Schedulers.io())//被观察者执行在什么线程线程
.observeOn(AndroidSchedulers.mainThread())//观察者执行在什么线程线程
//建立订阅关系
.subscribe(object : Observer<String> {
override fun onSubscribe(d: Disposable) {
println("onSubscribe-Looper:" + (Looper.getMainLooper() == Looper.myLooper()))
}
override fun onNext(s: String) {
println("onNext$s")
}
override fun onError(e: Throwable) {
println("onError")
}
override fun onComplete() {
println("onComplete")
}
})
Observable
Observable中文意思就是被观察者,通过create方法生成对象,里面放的参数ObservableOnSubscribe,可以理解为一个计划表,泛型T是要操作对象的类型,重写subscribe方法。然后在其中写准备完成的事情(任务),当你执行这些任务的时候,订阅了这个对象的观察者就会收到消息。
然后subscribe有一个传参,他有3个方法,分别是onNext();onError();onComplete();。
其中onNext();可以无线调用,Observer都能收到。onComplete();可以多次调用,但Observer只接受一次;onError();只能调用一次,第二次将出现异常
Observer
通过new创建一个Observer并实现其中的方法:onNext();onError();onComplete();。看到这3个方法,就能猜到是做什么的了。
如上面所说,当Observable通过subscribe的传参执行onNext()等方法时,Observer的这些方法就会被执行。
这个关系就像音乐软件的歌手、音乐人,和关注他们的听众,当音乐人发布新歌时,听众就会收到通知。
Scheduler
RxJava是支持异步的,但要如何做到呢?这就需要讲到Scheduler,中文翻译过来就是调度器。
它是用来控制线程的,如果没有设置Scheduler,RxJava遵循哪个线程产生,就在哪个线程消费的原则,即观察者和消费者是在同一个线程。
如果需要前台调用,后台执行。那么就需要用到Scheduler了,
.observeOn(AndroidSchedulers.mainThread())表示观察者执行在什么线程
.subscribeOn(Schedulers.io())表示被观察者执行在什么线程线程
参考文章:https://www.jianshu.com/p/cd3557b1a474
深入参考文章:https://blog.csdn.net/yang_study_first/article/details/111085666
RxJava2.x的理解与总结的更多相关文章
- RxJava2.0的使用详解
RxJava2.0的使用详解 1,初识RxJava RxJava就是一种用Java语言实现的响应式编程,来创建基于事件的异步程序 RxJava是一个基于事件订阅的异步执行的一个类库,目前比较火的一些技 ...
- RxJava2 源码解析(二)
概述 承接上一篇RxJava2 源码解析(一),本系列我们的目的: 知道源头(Observable)是如何将数据发送出去的. 知道终点(Observer)是如何接收到数据的. 何时将源头和 ...
- RxJava2 源码解析(一)
概述 最近事情太多了,现在公司内部的变动,自己岗位的变化,以及最近决定找工作.所以博客耽误了,准备面试中,打算看一看RxJava2的源码,遂有了这篇文章. 不会对RxJava2的源码逐字逐句的阅读,只 ...
- RxJava2.0学习笔记2 2018年7月3日 周二
摘记: 1.map -- 转换 有些服务端的接口设计,会在返回的数据外层包裹一些额外信息,这些信息对于调试很有用,但本地显示是用不到的.使用 map() 可以把外层的格式剥掉,只留下本地会用到的核心 ...
- RxJava1升级到RxJava2的注意事项
1.package更改 rx1包名由原来的rx.xxx更改为io.reactivex.xxx,并且在同一个module之下,rx1和rx2是不兼容的. 2.背压支持 RxJava在1.0只有一个个观察 ...
- RxJava 2.x 理解-3
背压:Flowable / Subscriber 在RxJava 1.x 理解 中,没有讲到背压这个概念,是因为学习太落后了,RxJava都出2了,所以直接在2上学. 背压是下游控制上游流速的一种手段 ...
- RxJava 2.x 理解-2
操作符总结: http://reactivex.io/documentation/operators.html https://github.com/ReactiveX/RxJava/wiki Ope ...
- RxJava 2.x 理解-1
在RxJava 1.x 系列中,讲解了RxJava的大致用法,因为现在都用RxJava 2了,所以Rxjava 1就不细讲,主要来学习RxJava 2. 基本使用: /** * rajava2 的基本 ...
- RxJava2 源代码解析(一)
转载请标明出处: http://blog.csdn.net/zxt0601/article/details/61614799 本文出自:[张旭童的博客](http://blog.csdn.net/zx ...
- Android 从零开始搭建一个主流项目框架—RxJava2.0+Retrofit2.0+OkHttp
我这里的网络请求是用的装饰者模式去写的,什么是装饰者模式呢?在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.我的理解就是一个接口, ...
随机推荐
- 03-Verilog语法
Verilog语法 1 Register 组合逻辑-->寄存器-->组合逻辑-->寄存器 Register是一个变量,用于存储值,并不代表一个真正的硬件DFF. reg A,C; / ...
- Ubuntu 22.04 运行 Appimage 文件
解决方法 sudo apt-get update sudo apt install fuse libfuse2 chmod a+x *.appimage 参考资料 https://bynss.com/ ...
- 在Typescript项目中,使用ESLint和Prettier,以及解决保存代码后ESLint配置冲突问题
首先,检查项目中根目录.eslintrc.js文件,该文件中定义了ESLint的基础配置,找到其中的rules 例如: const prettierConfig = require('./.prett ...
- 朋友圈那串神秘字符背后的开源项目「GitHub 热点速览」
如果你这周没刷到类似 "npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237..." 的一串字符,那就说明本期 GitHub T ...
- Grafana 系列文章(十):为什么应该使用 Loki
️URL: https://grafana.com/blog/2020/09/09/all-the-non-technical-advantages-of-loki-reduce-costs-stre ...
- configurable 神图
自己做的
- VeryCapture V1.8.9.5 中文版安装使用教程
VeryCapture简介 VeryCapture中文版是一款实用的屏幕捕捉工具.VeryCapture最新版持将图钉在桌面.这个功能可以方便图片对比,在写论文或者写文章时比较方便.VeryCaptu ...
- 一文详解SpEL表达式注入漏洞
摘要:本文介绍了SpEL表达式以及常见的SpEL注入攻击,详细地介绍了部分漏洞攻击实例以及常用的漏洞检测与防御手段. 本文分享自华为云社区<SpEL表达式注入漏洞分析.检查与防御>,作者: ...
- Cesium模型贴地问题(八)
2023-01-12 1.sampleTerrainMostDetailed 根据提供的terrainPrivider和点的弧度坐标计算出当前点的高度信息. var p = new Cesium.Ca ...
- 【译】.NET 7 中的性能改进(四)
原文 | Stephen Toub 翻译 | 郑子铭 边界检查消除 (Bounds Check Elimination) 让.NET吸引人的地方之一是它的安全性.运行时保护对数组.字符串和跨度的访问, ...