当前版本 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");
}
});
概述
observable1
对象的类型为ObservableFromArray
,它当中包含将要发射的数据源,数据源类型是数组类型..subscribe(Observer)
方法后的API调用流程,ObservableFromArray.subscribe(Observer)
⬇ObservableFromArray.subscribeActual(Observer)
⬇FromArrayDisposable.run()
⬇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();
}
}
}
}