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

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

代码示例
Observable<Integer> observable1 = Observable.just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
observable1.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");
    }
});
概述
  1. observable1对象的类型为ObservableFromArray,它当中包含将要发射的数据源,数据源类型是数组类型.
  2. .subscribe(Observer)方法后的API调用流程,
    1. ObservableFromArray.subscribe(Observer)
    2. ObservableFromArray.subscribeActual(Observer)
    3. FromArrayDisposable.run()
    4. Observer.onNext(value)
Observable.just(1, 2, 3,4,5,6,7,8,9,10)

创建ObservableFromArray对象,发射数据个数不超过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(Observer)

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();
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值