本文以 Rxjava 2 為基準(zhǔn),并非是詳細(xì)的入門文章,而是記錄我的學(xué)習(xí)過程中的知識(shí)點(diǎn)
想學(xué)習(xí) Rxjava 1 ,或者不想看我文章的請看:
- 扔物線大神的科普文 - 給 Android 開發(fā)者的 RxJava 詳解
rxjava 作為一個(gè)異步,響應(yīng)式庫影響的實(shí)在是太大了,不光是為我們提供了異常好用的異步操作,更是把響應(yīng)式編程的思想發(fā)揚(yáng)光大,自從 rxjava 出現(xiàn)后,各種響應(yīng)式編程的思想和使用如雨后春筍般出現(xiàn),甚至 Google 都推出了如 AAC 這樣的響應(yīng)式組件出來。
rxjava 作為學(xué)習(xí)響應(yīng)式編程的最佳切入點(diǎn),我們需要學(xué)習(xí)的內(nèi)容是非常多的,借 Carson_Ho 的一張圖表達(dá)下,大家安安靜靜的學(xué)習(xí)個(gè)吧星期就理解了
944365-4c1c1eb44ffe01e5.png
944365-369e71e6d3d04402.png
Rxjava 生命周期函數(shù)值行順序
Rxjava ·進(jìn)入 2.0 時(shí)代后,大幅度增加了生命周期函數(shù)的數(shù)量,大家有必須做到心里清楚
這里借:0青衣小褂0 同學(xué)的文章
Observable
->
doOnSubscribe
元素1
->
doOnEach
->
doOnNext
->
onNext(Observer)
->
doAfterNext
元素2
->
doOnEach
->
doOnNext
->
onNext(Observer)
->
doAfterNext
-> doOnEach
->{
doOnError -> onError(Observer)
doOnComplete -> onComplete(Observer)
}
->
doOnFinally
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
e.onNext(1);
e.onNext(2);
e.onError(new NullPointerException());
e.onNext(3);
}
})
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
Log.d(TAG, "doOnSubscribe");
}
})
.doOnEach(new Consumer<Notification<Integer>>() {
@Override
public void accept(Notification<Integer> integerNotification) throws Exception {
Log.d(TAG, "doOnEach");
}
})
.doOnNext(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.d(TAG, "doOnNext");
}
})
.doAfterNext(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.d(TAG, "doAfterNext");
}
})
.doOnError(new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Log.d(TAG, "doOnError");
}
})
.doFinally(new Action() {
@Override
public void run() throws Exception {
Log.d(TAG, "doFinally");
}
})
.subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Integer integer) {
Log.d(TAG, "observe : onNext : " + integer);
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "observe : onError");
}
@Override
public void onComplete() {
Log.d(TAG, "observe : onComplete");
}
});
02-13 11:08:46.821 19940-19940/... D/SplashActivity: doOnSubscribe
02-13 11:08:46.821 19940-19940/... D/SplashActivity: doOnEach
02-13 11:08:46.821 19940-19940/... D/SplashActivity: doOnNext
02-13 11:08:46.821 19940-19940/... D/SplashActivity: observe : onNext : 1
02-13 11:08:46.821 19940-19940/... D/SplashActivity: doAfterNext
02-13 11:08:46.821 19940-19940/... D/SplashActivity: doOnEach
02-13 11:08:46.821 19940-19940/... D/SplashActivity: doOnNext
02-13 11:08:46.821 19940-19940/... D/SplashActivity: observe : onNext : 2
02-13 11:08:46.821 19940-19940/... D/SplashActivity: doAfterNext
02-13 11:08:46.831 19940-19940/... D/SplashActivity: doOnEach
02-13 11:08:46.831 19940-19940/... D/SplashActivity: doOnError
02-13 11:08:46.831 19940-19940/... D/SplashActivity: observe : onError
02-13 11:08:46.831 19940-19940/... D/SplashActivity: doFinally
doOnEach 只要有元素發(fā)射,均會(huì)經(jīng)歷doOnEach,不論是不是正常元素,正常的元素,error,complete 都會(huì)觸發(fā) doOnEach
主要學(xué)習(xí)資料如下
我的文章目錄:
- 我學(xué) rxjava - 目錄
- 我學(xué) rxjava 2(1)- 簡單上手
- 我學(xué) rxjava 2(2)- 操作符
- 我學(xué) rxjava 2(3)- 熱發(fā)射
- 我學(xué) rxjava 2(4)- subscribeOn/observeOn 切換的是誰的線程
其他資料:
若不想 error 時(shí)結(jié)束鏈?zhǔn)?API ,可以看下面:
關(guān)于重試這塊的話看這篇: