當前版本 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();
}
}
}
}