1. 概述
我想,你在看这篇文章之前,应该要先了解一下Rxjava的魅力,具体百度啊,可以看看仍物线同学的文章。
create操作符,是一个什么都没有的状态下,创建一个Observable,可被观察者。
如上面的图示:
横轴是时间线,起点是create,从create,流水线开始,create中每次调用onNext,就有一次时间点的触发(红点)等等,最后,onComplete结束整个流水线。
2. 代码
建立起一个可被观察者:
//1.建立起一个可观察者,observable。
Observable<Integer> observable = Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
for (int i = 0; i < 5; i++) {
subscriber.onNext(i);
}
subscriber.onCompleted();
}
});
这里,建立起来后,代码里面调用了五次观察者的onNext,当然,此时,数据还并没有发射。当有订阅者,或者说,当有观察者观察的时候,才会触发这段代码运行。
然后,我们看看观察者:
//2.创建观察者。
Subscription subscription = observable.subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
LogUtils.e("onCompleted");
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onNext(Integer integer) {
LogUtils.e(integer.toString());
}
});
当观察者订阅之后,代码就开始运行了。
看看Log:
10-21 15:23:01.658 22690-22690/testmodules.chestnut E/TAG: 0
10-21 15:23:01.658 22690-22690/testmodules.chestnut E/TAG: 1
10-21 15:23:01.658 22690-22690/testmodules.chestnut E/TAG: 2
10-21 15:23:01.658 22690-22690/testmodules.chestnut E/TAG: 3
10-21 15:23:01.658 22690-22690/testmodules.chestnut E/TAG: 4
10-21 15:23:01.659 22690-22690/testmodules.chestnut E/TAG: onCompleted
嗯,onNext调用了五次,最后onCompleted。
3. 观察者的说明
Throwable
当调用链抛出未Catch的异常时候,会直接跳到
new Action1<Throwable>()
此时,不会去调用onCompleted,整条链结束。
onNext
当一个数据流完整的发射下来(中间没有抛异常),那会一个一个地调用onNext。
onCompleted
当整条链都发射完毕(中间没有抛异常),会调用:onCompleted。如果有异常,会直接捕抓到Throwable,而不会调用onCompleted。
4. 最后
Rx是2015年,热起来的一个新思想,如果你还没接触,就要赶紧了。新思想,新技术的注入,必定将颠覆你的编程思想。这是一个潮流,你也必须跟上去,不然你就落后了。