public abstract class Observable implements ObservableSource {
}
可以看到 Observable 是一个抽象类,实现了 ObservableSource 接口
Observer
Observer 其实也是一个接口,里面定义了若干方法,onSubscribe ,onNext,onError,onComplete 方法。
public interface Observer {
void onSubscribe(@NonNull Disposable d);
void onNext(@NonNull T t);
void onError(@NonNull Throwable e);
void onComplete();
}
-
一个正常的事件序列的调用顺序会是这样的 onSubscribe > onNext > onComplete,若中途出错了,那调用顺序可能是这样的 onSubscribe > onNext > onError
-
onSubscribe 方法,当我们调用 Observable 的 subscribe 方法的时候,会先回调 Observer 的 onSubscribe 方法,此方法的调用顺序先于 onNext,onError ,onComplete 方法。
-
onError 方法与 onComplete 方法可以说是互斥的,调用了其中一个方法就不会调用另外一个方法
基本使用
在讲解原理之前,我们先来看一下 Rxjava 的一个基本使用。
Observable
.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter emitter) throws Exception {
emitter.onNext(“a”);
emitter.onNext(“b”);
emitter.onNext(“c”);
emitter.onComplete();
}
})
.subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
Log.e(“TAG”, "onSubscribe(): ");
}
@Override
public void onNext(String s) {
Log.e(“TAG”, "onNext(): " + s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
Log.e(“TAG”, "onComplete(): ");
}
});
E/TAG: onSubscribe():
E/TAG: onNext(): a
E/TAG: o