RxJava2
前言
最近公司的项目中有用到RxJava2框架,用到Lambda表达式,感觉一段小小的代码,功能缺如此强大,于是打算好好研究RxJava2这个框架。
网上很多关于RxJava2的介绍及使用情况,本文主要参考:https://gank.io/post/560e15be2dca930e00da1083 这篇文章,写的很详细,容易理解。还有带心情去旅行的【Android】RxJava的使用(一)到(四)
RxJava2在Github上的地址为:
https://github.com/ReactiveX/RxJava //用于Java
https://github.com/ReactiveX/RxAndroid //添加Android用的gradle
所以要使用时,需要在Module的build.gradle中添加依赖:
compile'io.reactivex.rxjava2:rxandroid:2.0.1'
compile'io.reactivex.rxjava2:rxjava:2.1.2'
RxJava2是什么?
本质上,RxJava2是一个实现异步操作的库。用它的目的是使得代码更简洁,因为在Android中,关于异步操作,可以用到AsyncTask和Handler,但是随着程序逻辑复杂程度的加深,代码的可读性就比较差,RxJava2依然能够保持代码的简洁。
RxJava2的异步操作主要通过观察者模式来实现的,观察者模式:即有观察者,被观察者,二者之间是一种订阅关系,当被观察者的某种状态改变时,观察者要根据被观察者状态的改变做出相应的反应。
RxJava2的实现,举个例子:
1.创建一个观察者Observer
2,创建一个被观察者
3,二者之间实现订阅关系
输出的结果为:
分析:
observable和observer之间通过observable.subscribe(observer)实现了一种订阅关系,刚开始调用的是observer的onSubscribe方法,事件触发后,通过e.onNext()方法回调,回调的具体内容是在Observer的onNext()方法中,两次回调onNext()方法后,回调onComplete()来表示事件结束。onComplete()和onError()之间是相对的关系,调用了onComplete()就不会调用onError(),反之亦然。
Observable的创建方式有3种:
以第一种方式创建Observable,Observer不变,代码如下:
输出的结果为:
分析:
observable先通过调用accept()方法,把通过fromArray传入的参数一个个accept,然后通过observer和observable之间的订阅关系,一步步回调。与create相比,节省了通过e.onNext(" ")的方式传入参数的代码。