Rx-创建操作符-Create

1 .概述:

我想,你在看这篇文章之前,应该要先了解一下Rxjava的魅力,具体百度啊,可以看看仍物线同学的文章。
create操作符,是一个什么都没有的状态下,创建一个Observable,可被观察者。


Rx-创建操作符-Create_第1张图片
create

如上面的图示:
横轴是时间线,起点是create,从create,流水线开始,create中每次调用onNext,就有一次时间点的触发(红点)等等,最后,onComplete结束整个流水线。

2 .代码:

建立起一个可被观察者:

//1.建立起一个可观察者,observable。
        Observable observable = Observable.create(new Observable.OnSubscribe() {
            @Override
            public void call(Subscriber subscriber) {
                for (int i = 0; i < 5; i++) {
                    subscriber.onNext(i);
                }
                subscriber.onCompleted();
            }
        });

这里,建立起来后,代码里面调用了五次观察者的onNext,当然,此时,数据还并没有发射。当有订阅者,或者说,当有观察者观察的时候,才会触发这段代码运行。
然后,我们看看观察者:

//2.创建观察者。
        Subscription subscription = observable.subscribe(new Observer() {
            @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()

  • 此时,不会去调用onCompleted,整条链结束。

  • onNext

  • 当一个数据流完整的发射下来(中间没有抛异常),那会一个一个地调用onNext。

  • onCompleted

  • 当整条链都发射完毕(中间没有抛异常),会调用:onCompleted。如果有异常,会直接捕抓到Throwable,而不会调用onCompleted。

4. 最后

Rx是2015年,热起来的一个新思想,如果你还没接触,就要赶紧了。新思想,新技术的注入,必定将颠覆你的编程思想。这是一个潮流,你也必须跟上去,不然你就落后了。

你可能感兴趣的:(Rx-创建操作符-Create)