您的位置:首页 > 编程语言 > Java开发

RxJava

2016-04-05 13:53 826 查看

RxJava

2016/2/19 15:03:53

看了大头鬼翻译的rxJava。这里写写我认为重要的点。

核心思想

RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(观察者)。Observables发出一系列事件,Subscribers处理这些事件。这里的事件可以是任何你感兴趣的东西(触摸事件,web接口调用返回的数据。。。)

一个observable 可以发出0个或者多个事件,知道结束或者出错。每发出一个事件,就会调用它的Subscriber的onNext方法,最后调用Subscriber.onNext()或者Subscriber.onError()结束

各位看官看到这是不是说这就是观察者模式思想。但是这和真正的观察者有点区别:如果一个Observerble没有任何的的Subscriber,那么这个Observable是不会发出任何事件的。

observable的创建。

简单构建Observable.create(OnSubscribe f)

RxJava内置了很多简化创建Observable对象的函数

Observable.just()就是用来创建只发出一个事件就结束的Observable对象

Observable.from() 方法,它接收一个集合作为输入,然后每次输出一个元素给subscriber

操作符(Operators)解决对Observable对象的变换的问题,操作符用于在Observable和最终的Subscriber之间修改Observable发出的事件

(一些基本的操作符:)

map操作符:

Observable map(Func1 < ? super T, ? extends R> func)我们最初希望Subscriber 收到的类型是 T 类型的。但是经过 map 的转换,Subscriber 收到的是 R类型的数据

Observable.just("Hello, world!")
.map(new Func1<String, String>() {
@Override
public String call(String s) {
return s + " ---";
}
})
.subscribe(s -> System.out.println(s));


flatMap操作符:

Observable flatMap(Func1< ? super T, ? extends Observable< ? extends R>> func) 接收一个 Observable 的输出作为输入,同时输出另外一个Observable

```
query("Hello, world!")
.flatMap(new Func1<List<String>, Observable<String>>() {
@Override
public Observable<String> call(List<String> urls) {
return Observable.from(urls);
}
})
.subscribe(url -> System.out.println(url));
```


filter操作符:

Observable< T > filter ( Func1<?super T, Boolean> predicate )添加过滤条件。

take操作符

输出最多指定数量的结果

Observable take(final int count)

Observable take(long time, TimeUnit unit)

Observable take(long time, TimeUnit unit, Scheduler scheduler)

注意:(来自大头鬼)

1.Observable和Subscriber可以做任何事情

Observable可以是一个数据库查询,Subscriber用来显示查询结果;Observable可以是屏幕上的点击事件,Subscriber用来响应点击事件;Observable可以是一个网络请求,Subscriber用来显示请求结果。

2.Observable和Subscriber是独立于中间的变换过程的。

在Observable和Subscriber中间可以增减任何数量的map。整个系统是高度可组合的,操作数据是一个很简单的过程。

错误处理

Subscriber 对象需要实现三个方法。onNext(T t) , onCompleted() , onError(Throwable e)

只要有异常发生onError()一定会被调用,在这里可以做一下异常处理。

操作符不需要处理异常,bserverable的操作符调用链中一旦有一个抛出了异常,就会直接执行onError()方法。

你能够知道什么时候订阅者已经接收了全部的数据 onCompleted()

调度器

Android的一些耗时操作需要再子线程进行。否则会产生ANR。所以我们使用subscribeOn()指定观察者代码运行的线程,使用 observerOn()指定订阅者运行的线程

subscribeOn 指定Schedulers四个线程模式 :Schedulers.newThread() 新线程 Schedulers.computation() 计算线程

Schedulers.io() IO线程

observerOn() 可以把运行的结果发送回到指定线程,比如是AndroidSchedulers.mainThread()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: