RxJava已经火了一年多了,作为一个安卓开发再不去接触的话自己真的对不起自己的这份工作啊。在github中Rxjava是这样介绍的:RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.翻译过来意思指的是rxjava是java虚拟机实现:无扩展为组成的异步事件通过观测序列的基础程序库。从字面上看我就了解过异步与观察。所以我就从异步与观察入手慢慢的学习吧。
RxJava的异步实现是通过观察者模式实现的
其中主要实现过程:Observer(观察者)–>subscribe(订阅)–>Event(Observable某个状态),其中连接两者的桥梁便是subscribe订阅。通过订阅事件便可以及时收到事件改变的通知。在被观察者出现事件的某个状态的时候观察者通过订阅便会第一时间收到通知。
RxJava常用操作符的简单使用
just(创建操作):将一个或多个对象转换成发射这个或这些对象的一个Observable
|
from(创建操作):将一个Iterable, 一个Future, 或者一个数组转换成一个Observable
|
create(创建操作):使用一个函数从头开始创建一个Observable
|
timer(创建操作):创建在一个指定的延迟之后发射单个数据的Observable
|
interval(创建操作):创建一个定时发射整数序列的Observable
|
map(变换操作):将一个或多个项转变为其他类型的数据类型
|
flatmap(变换操作):flatMap将Observable的数据转换成一个或多个Observable
|
filter(过滤操作)
|
doOnSubscribe(辅助操作)
|
RxJava的线程控制器
- 当前线程:Schedulers.immediate()
- 新线程:Schedulers.newThread()
- IO线程:Schedulers.io()
- UI线程:AndroidSchedulers.mainThread()
|
RxJava实践
现在有这么一个需求:用户选择图片之后将图片裁剪成正方形,及时裁剪图片正中央的那一块,然后将路径回传给上一个页面。实现更换头像功能。在以前我们可以通过AsyncTask处理类似这样的需求,但是RxJava也是异步而且使用方法简单。我们就使用RxJava实现这个功能:首先我们获取图片的绝对路径通过转换为Bitmap再转换成绝对路径。中间过程在UI线程有个进度提示。下面是具体的主要代码实现。其中也有注释。有些方法你可以自己去实现就不贴代码了。
|
注意:
添加依赖:
compile ‘io.reactivex:rxandroid:1.2.1’
compile ‘io.reactivex:rxjava:1.1.6’
由于Rxjava功能太过强大了,以至于太多的功能不能一一列出来。后续补充。