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的一些讲解相关推荐

  1. RxJava2.x是一个非常棒的流式编程,采用的观察者模式思想,事件的产生者产生事间之后发送给绑定的接受者,接受顺序与发送顺序一致.但是 是独立于RxJava1.x存在,本文讲解RxJava2.x的简

    RxJava2.x是一个非常棒的流式编程,采用的观察者模式思想,事件的产生者产生事间之后发送给绑定的接受者,接受顺序与发送顺序一致.但是 是独立于RxJava1.x存在,本文讲解RxJava2.x的简 ...

  2. java 轮询请求接口_Android RxJava 实际应用讲解:(无条件)网络请求轮询

    前言 Rxjava,由于其基于事件流的链式调用.逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎. Github截图 RxJava如此受欢迎的原因,在于其提供了丰富 & ...

  3. 一款基于RxJava2+Retrofit2实现简单易用的网络请求框架

    本库是一款基于RxJava2+Retrofit2实现简单易用的网络请求框架,结合android平台特性的网络封装库,采用api链式调用一点到底,集成cookie管理,多种缓存模式,极简https配置, ...

  4. 基于RxJava2+Retrofit2简单易用的网络请求实现

    代码地址如下: http://www.demodashi.com/demo/13473.html 简介 基于RxJava2+Retrofit2实现简单易用的网络请求,结合android平台特性的网络封 ...

  5. rxjava背压_Android Rxjava :最简单全面背压讲解 (Flowable)

    1.前言 阅读本文需要对Rxjava了解,如果还没有了解或者使用过Rxjava的兄die们,可以观看我另外一篇 Android Rxjava:不一样的诠释进行学习. Rxjava背压:被观察者发送事件 ...

  6. RxJava2 方法总结

    RxJava2 方法总结 看了许多讲解RxJava的文章,有些文章讲解的内容是基于第一个版本的,有些文章的讲解是通过比较常用的一些API和基础的概念进行讲解的. 但是每次看到RxJava的类中的几十个 ...

  7. MVP+Dragger2+Rxjava2+Retrofit+OKhttp进行开发。

    MVP+Dragger2+Rxjava2+Retrofit+OKhttp框架已经流行很长时间,而且也必将成为未来android开发的趋势,在使用这个框架的过程中踩过很多坑, 所以想把我的经验告诉大家, ...

  8. RxJava2 转换操作符之FlatMap()方法

    前言: 本篇基于Map操作符,阅读该篇请确保,你已经了解过它:RxJava2 转换操作符之Map()方法.一如既往,干大事的人都是直接先上图,再解释的.(建议用PC端阅读,图片可以放大.排版,也有利于 ...

  9. retrofit 会请求两次_基于RxJava2+Retrofit2简单易用的网络请求实现

    简介 基于RxJava2+Retrofit2实现简单易用的网络请求,结合android平台特性的网络封装库,采用api链式调用一点到底,集成cookie管理,多种缓存模式,极简https配置,上传下载 ...

  10. 基于RxJava2.0+Retrofit2.0的文件下载实现(带进度,非覆写ResponseBody和拦截器)

    基于RxJava2.0+Retrofit2.0的文件下载实现(带进度,非覆写ResponseBody和拦截器) 前言 本文主要讲解RxJava2.0+Retrofit2.0实现下载文件并带进度效果,如 ...

最新文章

  1. 状态模式的介绍及状态机模型的函数库javascript-state-machine的用法和源码解析
  2. [NOIP2006] 提高组 洛谷P1066 2^k进制数
  3. SAP官方社区上提供的一些下载资源
  4. asp.net core 3.0 中使用 swagger
  5. linux dns函数,Linux DNS (1)的基本概念
  6. mac中强大的快捷键
  7. 图论画图有力工具 csacadmy app Graph Editor
  8. 金盾播放器android安卓,金盾跨平台视频加密系统
  9. WinRAR4.0注册码
  10. 大专大一计算机应用基础期末考试题,计算机基础大一考试题及答案
  11. 37个自学网站,一年让你省下十几万
  12. 【Fate/kaleid liner 魔法少女☆伊莉雅】系列中实践的、新世代的动画摄影工作流...
  13. 服务器安装Anaconda
  14. 视频号算法推荐机制! 微信视频号怎么上热门?
  15. 关于软件开发的那些事(二):聊聊协同打单的一些心得体会
  16. [转]WinRAR破解方法
  17. nas android 开源,五大开源NAS项目盘点
  18. opencv---c++
  19. 基于loongnix20系统,libvlc代码直接集成测试
  20. 内容管理系统CMS简介

热门文章

  1. ❤️【图文并茂】Chrome浏览器(油猴子)插件安装使用教程❤️
  2. 静态网页HTML知识点归纳
  3. 聊天室后台 java php_PHP实现简单聊天室(附源码)
  4. 软考高级 真题 2014年下半年 信息系统项目管理师 论文
  5. 2022年,消费品牌如何把握新的商业脉络?
  6. matlab高斯滤波去噪,图像平滑去噪之高斯滤波器
  7. 为什么高斯滤波器被广泛用于图像处理?
  8. st8s003 c语言编译器,ST系列STM8S003F3P6单片机芯片介绍
  9. I/O error on GET request for http://userservice/user/point/update: userservice; nested exception
  10. 电脑版微信防撤回插件