//1,創建被觀察者
new ObservableOnSubscribe() {
void subscribe(@NonNull ObservableEmitter<T> emitter) throws Exception;
source.subscribe(parent);
final ObservableOnSubscribe<T> source;
public interface ObservableOnSubscribe<T> {
void subscribe(@NonNull ObservableEmitter<T> emitter) throws Exception;
CreateEmitter<T> parent = new CreateEmitter<T>(observer);
CreateEmitter implements ObservableEmitter<T>
CreateEmitter(Observer<? super T> observer) {
public void subscribe(ObservableEmitter<Object> e) throws Exception {
protected void subscribeActual(Observer<? super T> observer) {
protected abstract void subscribeActual(Observer<? super T> observer);
subscribeActual(observer);
observer = RxJavaPlugins.onSubscribe(this, observer);
Observable = this
public static <T> Observer<? super T> onSubscribe(
@NonNull Observable<T> source,
@NonNull Observer<? super T> observer) {
return apply(f, source, observer);
static <T, U, R> R apply(@NonNull BiFunction<T, U, R> f,
@NonNull T t, @NonNull U u) {
return f.apply(t, u);
static volatile BiFunction<? super Observable,
? super Observer, ? extends Observer> onObservableSubscribe;
public interface BiFunction<T1, T2, R> {
R apply(@NonNull T1 t1, @NonNull T2 t2) throws Exception;
@Override
public Object apply(Integer a, Integer b) throws Exception {
return a + b;
}
@CheckReturnValue
@NonNull
@SchedulerSupport(SchedulerSupport.NONE)
public static <T> Observable<T> create(ObservableOnSubscribe<T> source) {
return RxJavaPlugins.onAssembly(new ObservableCreate<T>(source));
public ObservableCreate(ObservableOnSubscribe<T> source) {
this.source = source;
}
public static <T> Observable<T> onAssembly(@NonNull Observable<T> source) {
static volatile Function<? super Observable, ? extends Observable> onObservableAssembly;
public interface Function<T, R> {
R apply(@NonNull T t) throws Exception;
Function<? super Observable, ? extends Observable> f = onObservableAssembly;
if (f != null) {
return apply(f, source);
}
return source;
//3,被觀察者訂閱觀察者
observable.subscribe(observer);
public final void subscribe(Observer<? super T> observer) {
Observable = this;
observer = RxJavaPlugins.onSubscribe(this, observer);
public static <T> Observer<? super T> onSubscribe(@NonNull Observable<T> source, @NonNull Observer<? super T> observer) {
BiFunction<? super Observable, ? super Observer, ? extends Observer> f = onObservableSubscribe;
if (f != null) {
return apply(f, source, observer);
}
return observer;
}
subscribeActual(observer);