RXJava2

1.什么是RXJava2

ReactiveX(Reactive Extensions),一般简写为Rx,是一个使用可观察数据流进行异步编程的编程接口。由微软的架构师Erik Meijer领导的团队开发,Rx是一个编程模型,目标是提供一致的编程接口,帮助开发者更方便地编写异步和基于事件的程序,现在已经有了RxJava、RxJS、Rx.NET、RxScala、RxClojure、RxSwift等基本所有主流语言的实现,受到越来越多的开发者的欢迎,开源社区也普遍在使用。

RxJava 在 GitHub 主页上是这样说的 “alibrary for composing asynchronous and event-based programs using observablesequences for the Java VM”(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。
恩,简单来说,异步操作库

2.为什么要使用RXJava2

无论你开发app还是后台应用,你总会时不时地编写一些异步或基于事件的代码,但你会发现很难完美地处理工作线程和主线程的切换、异常的处理、线程的取消、线程同步等等问题,而且在多个线程协调处理业务逻辑时代码结构变得异常的复杂而且还容易出错。(链式操作).

函数式编程

对可观察数据流使用无副作用的输入输出函数,避免了程序里错综复杂的状态

精简代码

Rx的操作符经常可以将复杂的难题简化为很少的几行代码

更好地处理异步错误

传统的try/catch对于异步计算过程中的错误无能为力,但Rx提供了很好的错误处理机制

轻松处理并发

Rx的Observable和Scheduler让开发者可以摆脱底层的线程同步和各种并发问题

3.简单使用

1.导入依赖

   compile 'io.reactivex.rxjava2:rxjava:2.0.1'

   compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

2.创建一个发送事件的东西ObServable(可观察的事物)

 发送事件或者说一个值

3.一个事件处理的东西Observer观察者

4.进行关联也就是订阅

4.相关面试题

RxJava2 简述

RxJava2如何解决背压

什么是背压?

数据流发射,处理,响应可能在各自的线程中独立进行,上游在发射数据的时候,不知道下游是否处理完,也不会等下游处理完之后再发射。
这样,如果上游发射的很快而下游处理的很慢,会怎样呢?
将会产生很多下游没来得及处理的数据,这些数据既不会丢失,也不会被垃圾回收机制回收,而是存放在一个异步缓存池中,如果缓存池中的数据一直得不到处理,越积越多,最后就会造成内存溢出,这便是Rxjava中的背压问题。

解决:使用BackpressureStrategy背压策略

    ERROR,BUFFER,DROP,LATEST,MISSING
5.流程图


上面一根水管为事件产生的水管,叫它上游吧,下面一根水管为事件接收的水管叫它下游吧。

两根水管通过一定的方式连接起来,使得上游每产生一个事件,下游就能收到该事件。这里的事件发送的顺序是先1,后2,后3这样的顺序, 事件接收的顺序也是先1,后2,后3的顺序, 我觉得这样更符合我们普通人的思维, 简单明了.

这里的上游和下游就分别对应着RxJava中的ObservableObserver它们之间的连接就对应着subscribe()


发送事件的规则:

·  上游可以发送无限个onNext, 下游也可以接收无限个onNext.

·  当上游发送了一个onComplete后, 上游onComplete之后的事件将会继续发送, 而下游收到onComplete事件之后将不再继续接收事件.

·  当上游发送了一个onError后, 上游onError之后的事件将继续发送, 而下游收到onError事件之后将不再继续接收事件.

·  上游可以不发送onComplete或onError.

·  最为关键的是onComplete和onError必须唯一并且互斥, 即不能发多个onComplete, 也不能发多个onError, 也不能先发一个onComplete, 然后再发一个onError, 反之亦然

Map

map是RxJava中最简单的一个变换操作符了, 它的作用就是对上游发送的每一个事件应用一个函数,

使得每一个事件都按照指定的函数去变化. 用事件图表示如下:

map能够将数据进行转换(发送的Integer转换成String类型) 返回的是一个新的数据(修改之后的)。



FlatMap

flatMap也能够将数据进行转换(发送的Integer转换成String类型)返回的是一个Observable(也就是一个上游)。



Zip

zip:有多个上游,一个下游。下游会将上游的数据进行匹配,一一对应。在匹配个数不一样时终止。



6.关键字

Observable 被观察者  Observer 观察者  
Subscribe 订阅  Disposable 可处理的 
ObservableEmitter  事件发射器
7.链接(推荐的链接)

  给初学者的RxJava2.0教程(一)

  http://www.jianshu.com/p/464fa025229e

  给初学者的RxJava2.0教程(二)

http://www.jianshu.com/p/8818b98c44e2

 给初学者的RxJava2.0教程(三)

http://www.jianshu.com/p/128e662906af

 给初学者的RxJava2.0教程(四)

http://www.jianshu.com/p/bb58571cdb64

 给初学者的RxJava2.0教程(五)

 http://www.jianshu.com/p/0f2d6c2387c9

 给初学者的RxJava2.0教程(六)

 http://www.jianshu.com/p/e4c6d7989356

 给初学者的RxJava2.0教程(七)

 http://www.jianshu.com/p/9b1304435564

 给初学者的RxJava2.0教程(八)

 http://www.jianshu.com/p/a75ecf461e02

 给初学者的RxJava2.0教程(九)

 http://www.jianshu.com/p/36e0f7f43a51











  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[2\]:上面我们介绍了了关于RxJava的基本的概念和使用方式,在下面的文章中我们会按照以上定义的顺序从API的角度来讲解以下RxJava各个模块的使用方法。引用\[3\]:retry使用了一种错误重试机制,它可以在出现错误的时候进行重试,我们可以通过参数指定重试机制的条件。以下面的程序为例,这里我们设置了当出现错误的时候会进行2次重试,因此,第一次的时候出现错误会调用onNext,重试2次又会调用2次onNext,第二次重试的时候因为重试又出现了错误,因此此时会触发onError方法。也就是说,下面这段代码会触发onNext3次,触发onError()1次。 问题: rxjava2 defer是什么意思? 回答: 在RxJava2中,defer是一个非常有用的操作符。它允许我们在每次订阅时创建一个新的Observable,以便能够动态地生成Observable。defer操作符接受一个Observable的工厂函数作为参数,当有观察者订阅时,它会调用这个工厂函数创建一个新的Observable。这样,每次订阅时都会得到一个全新的Observable实例,可以确保每个订阅者都能够获取到最新的数据。defer操作符的使用场景包括延迟创建Observable、动态地生成Observable等。 #### 引用[.reference_title] - *1* *2* *3* [RxJava 系列-1:一篇的比较全面的 RxJava2 方法总结](https://blog.csdn.net/weixin_34411563/article/details/87985915)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值