扔物線 基於rxjava1.0寫的一篇《給 Android 開發者的 RxJava 詳解》很值得我們細細品讀,我是讀了幾遍,越度越有味道,RxJava的核心異步,即線程的調度,要想學好Rx的異步功能。這篇文章我們先來學習學習設計模式中的觀察者模式Observe
RxJava 的觀察者模式,四個基本概念:Observer (觀察者)、Observable (被觀察者)、 subscribe (訂閱)、事件。Observable 和 Observer 通過 subscribe() 方法實現訂閱關係,從而 Observable 可以在需要的時候發出事件來通知 Observer。
Observer 觀察者
//觀察者
Observer<Integer> observer = new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Integer value) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
//RxJava內置觀察者的接口 用法跟Observe一樣
Subscriber<String> subscriber = new Subscriber<String>() {
@Override
public void onSubscribe(Subscription s) {
}
@Override
public void onNext(String s) {
}
@Override
public void onError(Throwable t) {
}
@Override
public void onComplete() {
}
};
Observable 被觀察者
Rx1.0版創建被觀察者方法
Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("next1");
subscriber.onNext("next2");
subscriber.onCompleted();
}
});
Rx2.0的版創建被觀察者的方法
//創建被觀察者 Observable.create
Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
}
});
//創建被觀察者 直接new
Observable<String> observable2 = new Observable<String>() {
@Override
protected void subscribeActual(Observer<? super String> observer) {
observer.onNext("next1");
observer.onNext("next2");
observer.onComplete();
}
};
Subscribe 訂閱
訂閱關係當然是觀察者訂閱被觀察者啦
這樣寫
//觀察者
Observer<String> observer = new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String value) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
//觀察者訂閱被觀察者
Observable.just("1","2","3").subscribe(observer);
或者這樣寫
//觀察者訂閱被觀察者
Observable.just("1", "2", "3").subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String value) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});