RxJava2 (五)just操作符源码阅读

当前版本 2.2.19
RxJava2 (一)订阅流程源码阅读
RxJava2 (二)取消订阅流程 dispose( ) 源码阅读
RxJava2 (三)线程切换源码阅读
RxJava2 (四)切换UI主线程源码阅读
RxJava2 (五)just操作符源码阅读
RxJava2 (六)map操作符源码阅读

代码示例
Observable.just(1, 2, 3,4,5,6,7,8,9,10)
        .subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(Disposable d) {
                System.out.println("onSubscribe");
            }
            @Override
            public void onNext(Integer integer) {
                System.out.println("onNext: " + integer);
            }
            @Override
            public void onError(Throwable e) {
                System.out.println("onError");
            }
            @Override
            public void onComplete() {
                System.out.println("onComplete");
            }
        });
Observable.just(1, 2, 3,4,5,6,7,8,9,10)

创建一个被观察者,发送事件,发送事件个数不超过10个以上.

// Observable类
public abstract class Observable<T> implements ObservableSource<T> {
    public static <T> Observable<T> just(T item1, T item2, T item3, T item4, T item5, T item6, T item7, T item8, T item9, T item10) {
       return fromArray(item1, item2, item3, item4, item5, item6, item7, item8, item9, item10); 
    }
    // 创建ObservableFromArray对象并返回
    public static <T> Observable<T> fromArray(T... items) {
        ...
        return RxJavaPlugins.onAssembly(new ObservableFromArray<T>(items));
    }
}
// ObservableFromArray类
public final class ObservableFromArray<T> extends Observable<T> {
    final T[] array;// just操作符中传入的10个数据现在由array数组保存
    public ObservableFromArray(T[] array) {
        this.array = array;
    }
}
.subscribe()

ObservableFromArray对象调用.subscribe()方法后,最终将调用ObservableFromArray.subscribeActual()

// ObservableFromArray类
public final class ObservableFromArray<T> extends Observable<T> {
    final T[] array;// just操作符中传入的10个数据现在由array数组保存
    public ObservableFromArray(T[] array) {
        this.array = array;
    }
    @Override
    public void subscribeActual(Observer<? super T> observer) {
        // observer: 手动创建的观察者对象
        // array: just符号传入的数据数组
        FromArrayDisposable<T> d = new FromArrayDisposable<T>(observer, array);
        // 调用手动创建的观察者对象的onSubscribe()方法
        observer.onSubscribe(d);
        ...
        // 使观察者接收数据
        d.run();
    }
    static final class FromArrayDisposable<T> extends BasicQueueDisposable<T> {
        
        FromArrayDisposable(Observer<? super T> actual, T[] array) {
            this.downstream = actual; // 观察者对象
            this.array = array; // 待发射的数据数组
        }
        // 观察者接收数据
        void run() {
            T[] a = array;
            int n = a.length;
            for (int i = 0; i < n && !isDisposed(); i++) {
                T value = a[i];
                ...
                // 将just中传入的数据通过观察者中的onNext()传出.
                downstream.onNext(value);
            }
            if (!isDisposed()) {
                // 数据传递完成之后就调用观察者的onComplete()方法
                downstream.onComplete();
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章