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
我这里的网络请求是用的装饰者模式去写的,什么是装饰者模式呢?在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.我的理解就是一个接口, ...
随机推荐
- 轻松理解Promise.all 、Promise.then、Promise.race有什么区别以及使用方法
简单来说呢,Promse.all一般应用于某个场景需要多个接口数据合并起来才能实现 有个极大地好处我必须说一下,请求顺序和获取数据顺序是一样的哟,大可放心使用~~ const success1 = n ...
- 关于VBA中,activesheet用法的一些思考
前二天,给财务部做了个数据采集的工具,因为财务现在用的是excel2013 和2017的版本,所以我决定不用python,改用VBA来处理这个工具. 在 写过程的时候,我用了sheets(i)来定位表 ...
- java入门与进阶-P1.5+P1.6
输入 Scanner输入语句介绍 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 下面是创建 Scanner 对象的基本语法: Sca ...
- FAQ os.system调用失效问题
os.system调用失效问题 背景 有个学员反馈allure无法生成报告 # 示例代码 import pytest,os def test_os(): pass if __name__ == '__ ...
- Vue02 Node下载安装
转 https://blog.csdn.net/A_awen/article/details/121952701 1 下载 https://nodejs.org/en/download/ 2 安装 全 ...
- springcloud 02-zookeeper
转 https://www.cnblogs.com/h--d/p/12643306.html ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的 ...
- pnpm
一.概念 performant npm ,意味"高性能的 npm".pnpm由npm/yarn衍生而来,解决了npm/yarn内部潜在的bug,极大的优化了性能,扩展了使用场景.被 ...
- Portainer功能使用之开启远程访问
配置远程连接Docker服务 1.配置 说明:docker默认没有打开"2375"端口,需要先进行配置开启端口 命令 修改配置:vim /usr/lib/systemd/syste ...
- 利用Git+GitHub进行团队协作开发
自己之前写过两篇关于Git和GItHub使用的文章,分别是 浅谈使用git 进行版本控制博客链接:https://www.cnblogs.com/wj-1314/p/7992543.html 使用Gi ...
- JZOJ 排列统计
排列统计 \(Description\) 对于给定的一个长度为n的序列{B[n]},问有多少个序列{A[n]}对于所有的i满足:A[1]-A[i]这i个数字中有恰好B[i]个数字小等于i.其中{A[n ...