RXJava2

来源:互联网 发布:java读取ftp中excel 编辑:程序博客网 时间:2024/05/17 22:12

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











原创粉丝点击