Rxjava2.X的一些讲解
rxjava是什么?
总结一句话就是 异步切换操作的工具
Rxjava常用的一些操作符
1.concat(英文翻译为连接的意思)
就是将多个Observable(上游发送器又名被观察者)统一起来按顺序返回一个Observable
下面是源码的一重要部分,返回的是一个T类型,所以两个被观察者的返回的类型应该是一样的,或者可以传入一个Object
如下图所示,创建两个Observable
然后用concat连接起来
如果Text(12)这样打印的结构会是什么呢?
没错只走了第一个Observable,因为他只有等第一个执行完onnext()并且执行onComplete()方法后第二个才会执行
我们验证一些
看下打印结果
并且observer(下游又名观察者)onComplete()方法是又最后一个Observable所调用的
2.map()操作符,用来转换返回结果值的
传入一个function(传入的值,需要转换为的值)
Observable.create(new ObservableOnSubscribe<String>() {@Override public void subscribe(ObservableEmitter<String> e) throws Exception {e.onNext("234");}
}).map(new Function<String, Integer>() {@Override public Integer apply(String s) throws Exception {if (s.equals("234")){return 3;}else{return 5;}}
}).subscribe(new Observer<Integer>() {@Override public void onSubscribe(Disposable d) {System.out.println("Disposable == " + d.isDisposed());}@Override public void onNext(Integer integer) {System.out.println("onNext == " + integer);}@Override public void onError(Throwable e) {}@Override public void onComplete() {System.out.println("onComplete == ");}
});
我们看下打印的结果是什么
没错转换了,这就是map转换器的作用
大家可能看到
这是是干嘛的呢?
取消订阅的功能
3.ZIP操作符
顾明思议是打包的意思,就是相当于把两个observable ,随意取出数据来组合
组合的过程是分别从 两根水管里各取出一个事件 来进行组合, 并且一个事件只能被使用一次, 组合的顺序是严格按照事件发送的顺利 来进行的, 也就是说不会出现圆形1 事件和三角形B 事件进行合并, 也不可能出现圆形2 和三角形A 进行合并的情况.
最终下游收到的事件数量 是和上游中发送事件最少的那一根水管的事件数量 相同. 这个也很好理解, 因为是从每一根水管 里取一个事件来进行合并, 最少的 那个肯定就最先取完 , 这个时候其他的水管尽管还有事件 , 但是已经没有足够的事件来组合了, 因此下游就不会收到剩余的事件了.
实用的地方
- zip在Android中的使用,可以适用于如下场景,一个界面需要展示用户的一些信息,这些信息分别要从两个服务器接口中获取,只有当两个数据都获取后才能进行展示。这类同时的信息请求比较适用zip
这里注意BIGFunction是三个参数,前面两个是用来组合的observable的参数,最后一个是用来返回的参数
4schedulePeriodically
轮询请求,在一些需要隔段时间进行联网请求反复需要获取数据的场景
Observable.create(new ObservableOnSubscribe<String>() {@Overridepublic void subscribe(final ObservableEmitter<String> e) throws Exception {Schedulers.io().createWorker().schedulePeriodically(new Runnable() { //指定请求网络的在io线程上@Overridepublic void run() {e.onNext("我来请求数据了");}},0,500,TimeUnit.MILLISECONDS);} }).subscribe(new Observer<String>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onNext(String s) {Log.e("tag",s);}@Overridepublic void onError(Throwable e) {}@Overridepublic void onComplete() {} });
结果是每隔500毫米请请求一次一直打印log
Rxjava2.X的一些讲解相关推荐
- RxJava2.x是一个非常棒的流式编程,采用的观察者模式思想,事件的产生者产生事间之后发送给绑定的接受者,接受顺序与发送顺序一致.但是 是独立于RxJava1.x存在,本文讲解RxJava2.x的简
RxJava2.x是一个非常棒的流式编程,采用的观察者模式思想,事件的产生者产生事间之后发送给绑定的接受者,接受顺序与发送顺序一致.但是 是独立于RxJava1.x存在,本文讲解RxJava2.x的简 ...
- java 轮询请求接口_Android RxJava 实际应用讲解:(无条件)网络请求轮询
前言 Rxjava,由于其基于事件流的链式调用.逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎. Github截图 RxJava如此受欢迎的原因,在于其提供了丰富 & ...
- 一款基于RxJava2+Retrofit2实现简单易用的网络请求框架
本库是一款基于RxJava2+Retrofit2实现简单易用的网络请求框架,结合android平台特性的网络封装库,采用api链式调用一点到底,集成cookie管理,多种缓存模式,极简https配置, ...
- 基于RxJava2+Retrofit2简单易用的网络请求实现
代码地址如下: http://www.demodashi.com/demo/13473.html 简介 基于RxJava2+Retrofit2实现简单易用的网络请求,结合android平台特性的网络封 ...
- rxjava背压_Android Rxjava :最简单全面背压讲解 (Flowable)
1.前言 阅读本文需要对Rxjava了解,如果还没有了解或者使用过Rxjava的兄die们,可以观看我另外一篇 Android Rxjava:不一样的诠释进行学习. Rxjava背压:被观察者发送事件 ...
- RxJava2 方法总结
RxJava2 方法总结 看了许多讲解RxJava的文章,有些文章讲解的内容是基于第一个版本的,有些文章的讲解是通过比较常用的一些API和基础的概念进行讲解的. 但是每次看到RxJava的类中的几十个 ...
- MVP+Dragger2+Rxjava2+Retrofit+OKhttp进行开发。
MVP+Dragger2+Rxjava2+Retrofit+OKhttp框架已经流行很长时间,而且也必将成为未来android开发的趋势,在使用这个框架的过程中踩过很多坑, 所以想把我的经验告诉大家, ...
- RxJava2 转换操作符之FlatMap()方法
前言: 本篇基于Map操作符,阅读该篇请确保,你已经了解过它:RxJava2 转换操作符之Map()方法.一如既往,干大事的人都是直接先上图,再解释的.(建议用PC端阅读,图片可以放大.排版,也有利于 ...
- retrofit 会请求两次_基于RxJava2+Retrofit2简单易用的网络请求实现
简介 基于RxJava2+Retrofit2实现简单易用的网络请求,结合android平台特性的网络封装库,采用api链式调用一点到底,集成cookie管理,多种缓存模式,极简https配置,上传下载 ...
- 基于RxJava2.0+Retrofit2.0的文件下载实现(带进度,非覆写ResponseBody和拦截器)
基于RxJava2.0+Retrofit2.0的文件下载实现(带进度,非覆写ResponseBody和拦截器) 前言 本文主要讲解RxJava2.0+Retrofit2.0实现下载文件并带进度效果,如 ...
最新文章
- 状态模式的介绍及状态机模型的函数库javascript-state-machine的用法和源码解析
- [NOIP2006] 提高组 洛谷P1066 2^k进制数
- SAP官方社区上提供的一些下载资源
- asp.net core 3.0 中使用 swagger
- linux dns函数,Linux DNS (1)的基本概念
- mac中强大的快捷键
- 图论画图有力工具 csacadmy app Graph Editor
- 金盾播放器android安卓,金盾跨平台视频加密系统
- WinRAR4.0注册码
- 大专大一计算机应用基础期末考试题,计算机基础大一考试题及答案
- 37个自学网站,一年让你省下十几万
- 【Fate/kaleid liner 魔法少女☆伊莉雅】系列中实践的、新世代的动画摄影工作流...
- 服务器安装Anaconda
- 视频号算法推荐机制! 微信视频号怎么上热门?
- 关于软件开发的那些事(二):聊聊协同打单的一些心得体会
- [转]WinRAR破解方法
- nas android 开源,五大开源NAS项目盘点
- opencv---c++
- 基于loongnix20系统,libvlc代码直接集成测试
- 内容管理系统CMS简介
热门文章
- ❤️【图文并茂】Chrome浏览器(油猴子)插件安装使用教程❤️
- 静态网页HTML知识点归纳
- 聊天室后台 java php_PHP实现简单聊天室(附源码)
- 软考高级 真题 2014年下半年 信息系统项目管理师 论文
- 2022年,消费品牌如何把握新的商业脉络?
- matlab高斯滤波去噪,图像平滑去噪之高斯滤波器
- 为什么高斯滤波器被广泛用于图像处理?
- st8s003 c语言编译器,ST系列STM8S003F3P6单片机芯片介绍
- I/O error on GET request for http://userservice/user/point/update: userservice; nested exception
- 电脑版微信防撤回插件