Observable是一個non-backpressured,基於響應class的多值提供工廠方法,中間運算操作以及同步異步響應流。 它的許多操作接收ObservableSource作爲參數 (這類non-backpressured flows 基本響應接口類,Observable也實現了)。 Observable的操作默認情況下以128個元素的緩衝區運行,該大小可以通過修改系統的參數進行改變。 因爲大多數操作都能重載,所以可以顯示的設置內部的緩衝區大小。
Observable注意事項
1、所有的運算符操作可能在特定計算機中無法使用運行
Observable的源碼幾千行實在是太多了,只能找幾個主要的運算符操作來源碼分析了。主要的操作運算符使用方法將進行逐步更新補充完整。
/**
* TODO
* Provides an API (via a cold {@code Observable}) that bridges the reactive world with the callback-style world.
* 提供一個API(通過冷{@code Observable}),將反應式世界與回調式世界聯繫起來。
* <p>
* Whenever an {@link Observer} subscribes to the returned {@code Observable},
* the provided {@link ObservableOnSubscribe} callback is invoked with a fresh instance of an {@link ObservableEmitter}
* that will interact only with that specific {@code Observer}.
* 每當{@link Observer}訂閱返回的{@code Observable}時,ObservableEmitter將會
* 調用ObservableOnSubscribe提供的回調,並且只會與特定的Observer進行互動
* <p>
* If this {@code Observer} disposes the flow (making {@link ObservableEmitter#isDisposed} return {@code true}),
* 如果Observer處理了flow,使得ObservableEmitter#isDisposed=true
* other observers subscribed to the same returned {@code Observable} are not affected.
* 其他的observers訂閱返回來的同一個Observable將不受影響
* <p>
* You should call the {@code ObservableEmitter}'s {@code onNext}, {@code onError} and {@code onComplete} methods in a serialized fashion.
* 你應該以序列化的方式調用ObservableEmitter的 onNext、onError或onComplete方法
* The rest of its methods are thread-safe. 其他的方法是線程安全的
* <p>
* TODO 某些特定的計算機,Create方法不會運行
*
* @param source the emitter that is called when an {@code Observer} subscribes to the returned {@code Observable}
* 當Observer訂閱返回的Observable時調用的發射器。
*/
@CheckReturnValue
@NonNull
@SchedulerSupport(SchedulerSupport.NONE)
public static <T> Observable<T> create(@NonNull ObservableOnSubscribe<T> source) {
Objects.requireNonNull(source, "source is null");
return RxJavaPlugins.onAssembly(new ObservableCreate<>(source));
}
/**
* Returns an {@code Observable} that calls an {@link ObservableSource} factory to create an {@code ObservableSource} for each new {@link Observer}that subscribes.
* 返回一個Observable,ObservableSource工廠方法來創建一個ObservableSource爲每一個訂閱的Observer
* That is, for each subscriber, the actual {@code ObservableSource} that subscriber observes is determined by the factory function.
* 也就是說對每個訂閱者來說,訂閱者的觀察的實際的ObservableSource通過工廠功能決定
* <p>
* The {@code defer} operator allows you to defer or delay emitting items from an {@code ObservableSource} until such time as an
* {@code Observer} subscribes to the {@code ObservableSource}.
* defer操作符允許你通過ObservableSource推遲或者延遲發射items,直到Observer訂閱觀察該ObservableSource
* <p>
* This allows an {@code Observer} to easily obtain updates or a refreshed version of the sequence.
* 該方法允許能夠輕鬆地獲取更新或者版本刷新
* <p>
* TODO 同理,特定計算機該操作符無法生效
*
* @param supplier the {@code ObservableSource} factory function to invoke for each {@code Observer} that subscribes to the
* resulting {@code Observable}
* {@code ObservableSource}工廠函數,用於爲每個訂閱了*結果{@code Observable}的{@code Observer}調用
*/
@CheckReturnValue
@NonNull
@SchedulerSupport(SchedulerSupport.NONE)
public static <T> Observable<T> defer(@NonNull Supplier<? extends ObservableSource<? extends T>> supplier) {
Objects.requireNonNull(supplier, "supplier is null");
return RxJavaPlugins.onAssembly(new ObservableDefer<>(supplier));
}
/**
* Returns an {@code Observable} that emits no items to the {@link Observer} and immediately invokes its
* {@link Observer#onComplete onComplete} method.
* 返回一個{@code Observable},它不會向{@link Observer}發送任何項item,並立即調用其* {@link Observer#onComplete}方法。
* <p>
* TODO 同理,特定計算機該操作符無法生效
*/
@CheckReturnValue
@SchedulerSupport(SchedulerSupport.NONE)
@SuppressWarnings("unchecked")
@NonNull
public static <T> Observable<T> empty() {
return RxJavaPlugins.onAssembly((Observable<T>) ObservableEmpty.INSTANCE);
}
/**
* Returns an {@code Observable} that invokes an {@link Observer}'s {@link Observer#onError onError} method when the
* {@code Observer} subscribes to it.
* <p>
* <img width="640" height="221" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/error.supplier.png" alt="">
* TODO 同理,特定計算機該操作符無法生效
*
* @param supplier a {@link Supplier} factory to return a {@link Throwable} for each individual {@code Observer}
* Supplier工廠產生一個Throwable提供給每個Observer,這樣可以在OnError方法中使用
*/
@CheckReturnValue
@NonNull
@SchedulerSupport(SchedulerSupport.NONE)
public static <T> Observable<T> error(@NonNull Supplier<? extends Throwable> supplier) {
Objects.requireNonNull(supplier, "supplier is null");
return RxJavaPlugins.onAssembly(new ObservableError<>(supplier));
}
該篇博客純屬個人觀點和見解,如有錯誤懇請留言指正,萬分感激!
關聯鏈接: