目录
- RxJava的概述
- 什么是RxJava
- Why 要使用 RxJava
- 必须要了解的观察者
- RxJava的基本元素
- RxJava的简单使用
- 详解常用操作符
- 关于异步
一,RxJava的概述
1.0 什么是RxJava
- 要知道RxJava是什么,那么你应该先去了解一下Rx。Rx的全称是Reactive Extensions,直译过来就是响应式扩展。Rx基于观察者模式,他是一种编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流。
- 那么到底什么是RxJava呢?我对它的定义是:RxJava本质上是一个异步操作库,是一个能让你用极其简洁的逻辑去处理繁琐复杂任务的
异步
事件库。
1.1 RxJava的好处
- 规范项目成员的代码实现
- 让复杂的逻辑变得有条理性
1.2 必须要了解的观察者模式
观察者.pngTODO This
在这个事件中,台灯作为观察者,开关作为被观察者,台灯透过电线来观察开关的状态来并做出相应的处理
1.3 RxJava的基本元素
-
Observable
:被观察者,事件源 -
Subscriber/Observer
:观察者 -
OnSubscribe
:一个接口类,是连接被观察者和观察者的桥梁,另外要说明的是onSubscribe是Observable的一个局部变量
二,RxJava的简单使用
2.1 使用步骤
-
导包: 在build.gradle中导入如下:
compile 'io.reactivex:rxandroid:1.2.0' compile 'io.reactivex:rxjava:1.1.5'
-
创建 被观察者(Observerable<>)对象
-
创建 观察者 (Subscriber或者Observer)对象
-
通过订阅:把观察者和被观察者进行相互关联
2.2 最简单的实例演示
TODO This
三,RxJava的操作符详解
3.1 创建操作:创建Observable(被观察者)的操作符
-
create : 使用OnSubscribe从头创建一个Observable,这种方法比较简单。需要注意的是,使用该方法创建时,建议在OnSubscribe#call方法中检查订阅状态,以便及时停止发射数据或者运算。
-
from :将一个Iterable, 一个Future, 或者一个数组,内部通过代理的方式转换成一个Observable。代码如下:
String[] array = {"hello", "rxJava"};
Observable<String> observable = Observable.from(array); -
just:将一个或多个对象转换成发射这个或这些对象的一个Observable。如果是单个对象,内部创建的是ScalarSynchronousObservable对象。如果是多个对象,则是调用了from方法创建。
Observable<String> observable1 = Observable.just("hello", "rxjava");
-
empty: 创建一个什么都不做直接通知完成的Observable
-
error: 创建一个什么都不做直接通知错误的Observable
-
never: 创建一个什么都不做的Observable
3.2变换操作符:
-
map : 所谓变换,就是将事件序列中的对象或整个序列进行加工处理,转换成不同的事件或事件序列。
//举个栗子 //比如被观察者产生的事件中只有图片文件路径;但是在观察者这里只想要bitmap,那么就需要**类型变换**。 Observable.create(new Observable.just(getFilePath()) //使用map操作来完成类型转换 .map(new Func1<String, Bitmap>() { @Override public Bitmap call(String s) { //显然自定义的createBitmapFromPath(s)方法,是一个极其耗时的操作 return createBitmapFromPath(s); } }) .subscribe( //创建观察者,作为事件传递的终点处理事件 new Subscriber<Bitmap>() { @Override public void onCompleted() { Log.d("DDDDDD","结束观察...\n"); } @Override public void onError(Throwable e) { //出现错误会调用这个方法 } @Override public void onNext(Bitmap s) { //处理事件 showBitmap(s) } );
未完待续。。。
四,关于异步(线程调度)Scheduler
4.1 线程环境
RxJava的线程.png Observable.just(1, 2, 3, 4) // IO 线程,由 subscribeOn() 指定
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.newThread())
.map(mapOperator) // 新线程,由 observeOn() 指定
.observeOn(Schedulers.io()) .map(mapOperator2) // IO 线程,由 observeOn() 指定
.observeOn(AndroidSchedulers.mainThread)
.subscribe(subscriber); // Android 主线程,由 observeOn() 指定
- 这里注意的是: 有两个重要的api
- subscribeOn( )
- observeOn( )
- 需要注意的是(对于初学者,先了解到此就足够使用了):
- subscribeOn()它指示Observable在一个指定的调度器上创建(只作用于被观察者创建阶段)。只能指定一次,如果指定多次则以第一次为准
- observeOn()指定在事件传递(加工变换)和最终被处理(观察者)的发生在哪一个调度器。可指定多次,每次指定完都在下一步生效。
网友评论