美文网首页
RxJava 操作符对应关系之Just

RxJava 操作符对应关系之Just

作者: 追风之猪 | 来源:发表于2019-05-21 16:12 被阅读0次

    Just 操作符

    当接受的参数为单个元素时:

    observable.just("fdf");

    被观察者实例 :ObservableJust

    subscribeActual 将传入的观察者与ObservableJust的内部类ScalarDisposable事件发射器关联,

    public static final class ScalarDisposable<T>

    extends AtomicInteger

    implements QueueDisposable<T>, Runnable

    如上可见ScalarDisposable 本身实现了Runnable,事件发射自然就执行在run方法中

    @Override

    public void run() {

        if (get() == START && compareAndSet(START, ON_NEXT)) {

            observer.onNext(value);

            if (get() == ON_NEXT) {

                lazySet(ON_COMPLETE);

                observer.onComplete();

            }

        }

    }

    当接受的参数为多个元素时:

    首先会调用fromArray确认是否为多个元素

    如果为一个元素时,则重复上面的上面的步骤

    如果为多个元素时:

    observable.just("fdf","xxx")

    被观察者实例 :ObservableFromArray

    subscribeActual 将传入的观察者与 ObservableFromArray的内部类FromArrayDisposable事件发射器关联

    static final class FromArrayDisposable<T> extends BasicQueueDisposable<T>

    可以看到FromArrayDisposable继承自BasicQueueDisposable,所以他也是一个队列

    FromArrayDisposable中的run方法完成了多个元素的事件发射

    void run() {

        T[] a = array;

        int n = a.length;

        for (int i = 0; i < n && !isDisposed(); i++) {

            T value = a[i];

            if (value == null) {

                actual.onError(new NullPointerException("The " + i + "th element is null"));

                return;

            }

            actual.onNext(value);

        }

        if (!isDisposed()) {

            actual.onComplete();

        }

    }

    如上源码可见,在run方法中对just传进来的元素进行遍历,然后进行事件发射.

    相关文章

      网友评论

          本文标题:RxJava 操作符对应关系之Just

          本文链接:https://www.haomeiwen.com/subject/mwujzqtx.html