前言
Rxjava
磺陡,由于其基于事件流的鏈?zhǔn)秸{(diào)用沼本、邏輯簡(jiǎn)潔 & 使用簡(jiǎn)單的特點(diǎn),深受各大 Android
開(kāi)發(fā)者的歡迎薪捍。
如果還不了解
RxJava
笼痹,請(qǐng)看文章:Android:這是一篇 清晰 & 易懂的Rxjava 入門(mén)教程
-
RxJava
如此受歡迎的原因,在于其提供了豐富 & 功能強(qiáng)大的操作符酪穿,幾乎能完成所有的功能需求 - 今天凳干,我將為大家詳細(xì)介紹
RxJava
操作符中最常用的創(chuàng)建操作符,并附帶 Retrofit 結(jié)合 RxJava的實(shí)例Demo教學(xué)被济,希望你們會(huì)喜歡救赐。
Carson帶你學(xué)RxJava系列文章,包括 原理只磷、操作符经磅、應(yīng)用場(chǎng)景、背壓等等钮追,請(qǐng)關(guān)注看文章:Android:這是一份全面 & 詳細(xì)的RxJava學(xué)習(xí)指南
目錄
1. 作用
創(chuàng)建 被觀察者( Observable
) 對(duì)象 & 發(fā)送事件预厌。
2. 類(lèi)型
- 創(chuàng)建操作符包括如下:
- 下面,我將對(duì)每個(gè)操作符進(jìn)行詳細(xì)介紹
3. 應(yīng)用場(chǎng)景 & 對(duì)應(yīng)操作符 介紹
注:在使用RxJava 2
操作符前元媚,記得在項(xiàng)目的Gradle
中添加依賴(lài):
dependencies {
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.0.7'
// 注:RxJava2 與 RxJava1 不能共存轧叽,即依賴(lài)不能同時(shí)存在
}
3.1 基本創(chuàng)建
需求場(chǎng)景
完整的創(chuàng)建被觀察者對(duì)象對(duì)應(yīng)操作符類(lèi)型
create()
- 作用
完整創(chuàng)建1個(gè)被觀察者對(duì)象(Observable
)
RxJava
中創(chuàng)建被觀察者對(duì)象最基本的操作符
- 具體使用
/ **
* 1. 通過(guò)creat()創(chuàng)建被觀察者 Observable 對(duì)象
*/
Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
// 傳入?yún)?shù): OnSubscribe 對(duì)象
// 當(dāng) Observable 被訂閱時(shí),OnSubscribe 的 call() 方法會(huì)自動(dòng)被調(diào)用刊棕,即事件序列就會(huì)依照設(shè)定依次被觸發(fā)
// 即觀察者會(huì)依次調(diào)用對(duì)應(yīng)事件的復(fù)寫(xiě)方法從而響應(yīng)事件
// 從而實(shí)現(xiàn)由被觀察者向觀察者的事件傳遞 & 被觀察者調(diào)用了觀察者的回調(diào)方法 炭晒,即觀察者模式
/ **
* 2. 在復(fù)寫(xiě)的subscribe()里定義需要發(fā)送的事件
*/
@Override
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
// 通過(guò) ObservableEmitter類(lèi)對(duì)象 產(chǎn)生 & 發(fā)送事件
// ObservableEmitter類(lèi)介紹
// a. 定義:事件發(fā)射器
// b. 作用:定義需要發(fā)送的事件 & 向觀察者發(fā)送事件
// 注:建議發(fā)送事件前檢查觀察者的isUnsubscribed狀態(tài),以便在沒(méi)有觀察者時(shí)甥角,讓Observable停止發(fā)射數(shù)據(jù)
if (!observer.isUnsubscribed()) {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
}
emitter.onComplete();
}
});
// 至此网严,一個(gè)完整的被觀察者對(duì)象(Observable)就創(chuàng)建完畢了。
在具體使用時(shí)嗤无,一般采用 鏈?zhǔn)秸{(diào)用 來(lái)創(chuàng)建
// 1. 通過(guò)creat()創(chuàng)建被觀察者對(duì)象
Observable.create(new ObservableOnSubscribe<Integer>() {
// 2. 在復(fù)寫(xiě)的subscribe()里定義需要發(fā)送的事件
@Override
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
emitter.onComplete();
} // 至此震束,一個(gè)被觀察者對(duì)象(Observable)就創(chuàng)建完畢
}).subscribe(new Observer<Integer>() {
// 以下步驟僅為展示一個(gè)完整demo,可以忽略
// 3. 通過(guò)通過(guò)訂閱(subscribe)連接觀察者和被觀察者
// 4. 創(chuàng)建觀察者 & 定義響應(yīng)事件的行為
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "開(kāi)始采用subscribe連接");
}
// 默認(rèn)最先調(diào)用復(fù)寫(xiě)的 onSubscribe()
@Override
public void onNext(Integer value) {
Log.d(TAG, "接收到了事件"+ value );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
}
@Override
public void onComplete() {
Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
}
});
}
- 測(cè)試結(jié)果
3.2 快速創(chuàng)建 & 發(fā)送事件
需求場(chǎng)景
快速的創(chuàng)建被觀察者對(duì)象對(duì)應(yīng)操作符類(lèi)型
just()
- 作用
- 快速創(chuàng)建1個(gè)被觀察者對(duì)象(
Observable
) - 發(fā)送事件的特點(diǎn):直接發(fā)送 傳入的事件
- 快速創(chuàng)建1個(gè)被觀察者對(duì)象(
注:最多只能發(fā)送10個(gè)參數(shù)
應(yīng)用場(chǎng)景
快速創(chuàng)建 被觀察者對(duì)象(Observable
) & 發(fā)送10個(gè)以下事件具體使用
// 1. 創(chuàng)建時(shí)傳入整型1翁巍、2驴一、3、4
// 在創(chuàng)建后就會(huì)發(fā)送這些對(duì)象灶壶,相當(dāng)于執(zhí)行了onNext(1)肝断、onNext(2)、onNext(3)、onNext(4)
Observable.just(1, 2, 3,4)
// 至此胸懈,一個(gè)Observable對(duì)象創(chuàng)建完畢担扑,以下步驟僅為展示一個(gè)完整demo,可以忽略
// 2. 通過(guò)通過(guò)訂閱(subscribe)連接觀察者和被觀察者
// 3. 創(chuàng)建觀察者 & 定義響應(yīng)事件的行為
.subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "開(kāi)始采用subscribe連接");
}
// 默認(rèn)最先調(diào)用復(fù)寫(xiě)的 onSubscribe()
@Override
public void onNext(Integer value) {
Log.d(TAG, "接收到了事件"+ value );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
}
@Override
public void onComplete() {
Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
}
});
}
- 測(cè)試結(jié)果
fromArray()
- 作用
- 快速創(chuàng)建1個(gè)被觀察者對(duì)象(
Observable
) - 發(fā)送事件的特點(diǎn):直接發(fā)送 傳入的數(shù)組數(shù)據(jù)
- 快速創(chuàng)建1個(gè)被觀察者對(duì)象(
會(huì)將數(shù)組中的數(shù)據(jù)轉(zhuǎn)換為
Observable
對(duì)象
-
應(yīng)用場(chǎng)景
- 快速創(chuàng)建 被觀察者對(duì)象(
Observable
) & 發(fā)送10個(gè)以上事件(數(shù)組形式) - 數(shù)組元素遍歷
- 快速創(chuàng)建 被觀察者對(duì)象(
具體使用
// 1. 設(shè)置需要傳入的數(shù)組
Integer[] items = { 0, 1, 2, 3, 4 };
// 2. 創(chuàng)建被觀察者對(duì)象(Observable)時(shí)傳入數(shù)組
// 在創(chuàng)建后就會(huì)將該數(shù)組轉(zhuǎn)換成Observable & 發(fā)送該對(duì)象中的所有數(shù)據(jù)
Observable.fromArray(items)
.subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "開(kāi)始采用subscribe連接");
}
@Override
public void onNext(Integer value) {
Log.d(TAG, "接收到了事件"+ value );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
}
@Override
public void onComplete() {
Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
}
});
}
// 注:
// 可發(fā)送10個(gè)以上參數(shù)
// 若直接傳遞一個(gè)list集合進(jìn)去趣钱,否則會(huì)直接把list當(dāng)做一個(gè)數(shù)據(jù)元素發(fā)送
/*
* 數(shù)組遍歷
**/
// 1. 設(shè)置需要傳入的數(shù)組
Integer[] items = { 0, 1, 2, 3, 4 };
// 2. 創(chuàng)建被觀察者對(duì)象(Observable)時(shí)傳入數(shù)組
// 在創(chuàng)建后就會(huì)將該數(shù)組轉(zhuǎn)換成Observable & 發(fā)送該對(duì)象中的所有數(shù)據(jù)
Observable.fromArray(items)
.subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "數(shù)組遍歷");
}
@Override
public void onNext(Integer value) {
Log.d(TAG, "數(shù)組中的元素 = "+ value );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
}
@Override
public void onComplete() {
Log.d(TAG, "遍歷結(jié)束");
}
});
- 測(cè)試結(jié)果
fromIterable()
- 作用
- 快速創(chuàng)建1個(gè)被觀察者對(duì)象(
Observable
) - 發(fā)送事件的特點(diǎn):直接發(fā)送 傳入的集合
List
數(shù)據(jù)
- 快速創(chuàng)建1個(gè)被觀察者對(duì)象(
會(huì)將數(shù)組中的數(shù)據(jù)轉(zhuǎn)換為
Observable
對(duì)象
-
應(yīng)用場(chǎng)景
- 快速創(chuàng)建 被觀察者對(duì)象(
Observable
) & 發(fā)送10個(gè)以上事件(集合形式) - 集合元素遍歷
- 快速創(chuàng)建 被觀察者對(duì)象(
具體使用
/*
* 快速發(fā)送集合
**/
// 1. 設(shè)置一個(gè)集合
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
// 2. 通過(guò)fromIterable()將集合中的對(duì)象 / 數(shù)據(jù)發(fā)送出去
Observable.fromIterable(list)
.subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "開(kāi)始采用subscribe連接");
}
@Override
public void onNext(Integer value) {
Log.d(TAG, "接收到了事件"+ value );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
}
@Override
public void onComplete() {
Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
}
});
/*
* 集合遍歷
**/
// 1. 設(shè)置一個(gè)集合
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
// 2. 通過(guò)fromIterable()將集合中的對(duì)象 / 數(shù)據(jù)發(fā)送出去
Observable.fromIterable(list)
.subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "集合遍歷");
}
@Override
public void onNext(Integer value) {
Log.d(TAG, "集合中的數(shù)據(jù)元素 = "+ value );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
}
@Override
public void onComplete() {
Log.d(TAG, "遍歷結(jié)束");
}
});
- 測(cè)試結(jié)果
額外
// 下列方法一般用于測(cè)試使用
<-- empty() -->
// 該方法創(chuàng)建的被觀察者對(duì)象發(fā)送事件的特點(diǎn):僅發(fā)送Complete事件涌献,直接通知完成
Observable observable1=Observable.empty();
// 即觀察者接收后會(huì)直接調(diào)用onCompleted()
<-- error() -->
// 該方法創(chuàng)建的被觀察者對(duì)象發(fā)送事件的特點(diǎn):僅發(fā)送Error事件,直接通知異常
// 可自定義異常
Observable observable2=Observable.error(new RuntimeException())
// 即觀察者接收后會(huì)直接調(diào)用onError()
<-- never() -->
// 該方法創(chuàng)建的被觀察者對(duì)象發(fā)送事件的特點(diǎn):不發(fā)送任何事件
Observable observable3=Observable.never();
// 即觀察者接收后什么都不調(diào)用
3.3 延遲創(chuàng)建
- 需求場(chǎng)景
- 定時(shí)操作:在經(jīng)過(guò)了x秒后首有,需要自動(dòng)執(zhí)行y操作
- 周期性操作:每隔x秒后燕垃,需要自動(dòng)執(zhí)行y操作
defer()
- 作用
直到有觀察者(Observer
)訂閱時(shí),才動(dòng)態(tài)創(chuàng)建被觀察者對(duì)象(Observable
) & 發(fā)送事件
- 通過(guò)
Observable
工廠(chǎng)方法創(chuàng)建被觀察者對(duì)象(Observable
)- 每次訂閱后井联,都會(huì)得到一個(gè)剛創(chuàng)建的最新的
Observable
對(duì)象卜壕,這可以確保Observable
對(duì)象里的數(shù)據(jù)是最新的
應(yīng)用場(chǎng)景
動(dòng)態(tài)創(chuàng)建被觀察者對(duì)象(Observable
) & 獲取最新的Observable
對(duì)象數(shù)據(jù)具體使用
<-- 1. 第1次對(duì)i賦值 ->>
Integer i = 10;
// 2. 通過(guò)defer 定義被觀察者對(duì)象
// 注:此時(shí)被觀察者對(duì)象還沒(méi)創(chuàng)建
Observable<Integer> observable = Observable.defer(new Callable<ObservableSource<? extends Integer>>() {
@Override
public ObservableSource<? extends Integer> call() throws Exception {
return Observable.just(i);
}
});
<-- 2. 第2次對(duì)i賦值 ->>
i = 15;
<-- 3. 觀察者開(kāi)始訂閱 ->>
// 注:此時(shí),才會(huì)調(diào)用defer()創(chuàng)建被觀察者對(duì)象(Observable)
observable.subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "開(kāi)始采用subscribe連接");
}
@Override
public void onNext(Integer value) {
Log.d(TAG, "接收到的整數(shù)是"+ value );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
}
@Override
public void onComplete() {
Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
}
});
- 測(cè)試結(jié)果
因?yàn)槭窃谟嗛啎r(shí)才創(chuàng)建烙常,所以i值會(huì)取第2次的賦值
timer()
- 作用
- 快速創(chuàng)建1個(gè)被觀察者對(duì)象(
Observable
) - 發(fā)送事件的特點(diǎn):延遲指定時(shí)間后轴捎,發(fā)送1個(gè)數(shù)值0(
Long
類(lèi)型)
- 快速創(chuàng)建1個(gè)被觀察者對(duì)象(
本質(zhì) = 延遲指定時(shí)間后,調(diào)用一次
onNext(0)
- 應(yīng)用場(chǎng)景
延遲指定事件蚕脏,發(fā)送一個(gè)0侦副,一般用于檢測(cè)
- 具體使用
// 該例子 = 延遲2s后,發(fā)送一個(gè)long類(lèi)型數(shù)值
Observable.timer(2, TimeUnit.SECONDS)
.subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "開(kāi)始采用subscribe連接");
}
@Override
public void onNext(Long value) {
Log.d(TAG, "接收到了事件"+ value );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
}
@Override
public void onComplete() {
Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
}
});
// 注:timer操作符默認(rèn)運(yùn)行在一個(gè)新線(xiàn)程上
// 也可自定義線(xiàn)程調(diào)度器(第3個(gè)參數(shù)):timer(long,TimeUnit,Scheduler)
- 測(cè)試結(jié)果
interval()
- 作用
- 快速創(chuàng)建1個(gè)被觀察者對(duì)象(
Observable
) - 發(fā)送事件的特點(diǎn):每隔指定時(shí)間 就發(fā)送 事件
- 快速創(chuàng)建1個(gè)被觀察者對(duì)象(
發(fā)送的事件序列 = 從0開(kāi)始驼鞭、無(wú)限遞增1的的整數(shù)序列
- 具體使用
// 參數(shù)說(shuō)明:
// 參數(shù)1 = 第1次延遲時(shí)間秦驯;
// 參數(shù)2 = 間隔時(shí)間數(shù)字;
// 參數(shù)3 = 時(shí)間單位终议;
Observable.interval(3,1,TimeUnit.SECONDS)
// 該例子發(fā)送的事件序列特點(diǎn):延遲3s后發(fā)送事件汇竭,每隔1秒產(chǎn)生1個(gè)數(shù)字(從0開(kāi)始遞增1葱蝗,無(wú)限個(gè))
.subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "開(kāi)始采用subscribe連接");
}
// 默認(rèn)最先調(diào)用復(fù)寫(xiě)的 onSubscribe()
@Override
public void onNext(Long value) {
Log.d(TAG, "接收到了事件"+ value );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
}
@Override
public void onComplete() {
Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
}
});
// 注:interval默認(rèn)在computation調(diào)度器上執(zhí)行
// 也可自定義指定線(xiàn)程調(diào)度器(第3個(gè)參數(shù)):interval(long,TimeUnit,Scheduler)
- 測(cè)試結(jié)果
intervalRange()
- 作用
- 快速創(chuàng)建1個(gè)被觀察者對(duì)象(
Observable
) - 發(fā)送事件的特點(diǎn):每隔指定時(shí)間 就發(fā)送 事件穴张,可指定發(fā)送的數(shù)據(jù)的數(shù)量
- 快速創(chuàng)建1個(gè)被觀察者對(duì)象(
a. 發(fā)送的事件序列 = 從0開(kāi)始、無(wú)限遞增1的的整數(shù)序列
b. 作用類(lèi)似于interval()
两曼,但可指定發(fā)送的數(shù)據(jù)的數(shù)量
- 具體使用
// 參數(shù)說(shuō)明:
// 參數(shù)1 = 事件序列起始點(diǎn)皂甘;
// 參數(shù)2 = 事件數(shù)量;
// 參數(shù)3 = 第1次事件延遲發(fā)送時(shí)間悼凑;
// 參數(shù)4 = 間隔時(shí)間數(shù)字偿枕;
// 參數(shù)5 = 時(shí)間單位
Observable.intervalRange(3,10,2, 1, TimeUnit.SECONDS)
// 該例子發(fā)送的事件序列特點(diǎn):
// 1. 從3開(kāi)始,一共發(fā)送10個(gè)事件户辫;
// 2. 第1次延遲2s發(fā)送渐夸,之后每隔2秒產(chǎn)生1個(gè)數(shù)字(從0開(kāi)始遞增1,無(wú)限個(gè))
.subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "開(kāi)始采用subscribe連接");
}
// 默認(rèn)最先調(diào)用復(fù)寫(xiě)的 onSubscribe()
@Override
public void onNext(Long value) {
Log.d(TAG, "接收到了事件"+ value );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
}
@Override
public void onComplete() {
Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
}
});
- 測(cè)試結(jié)果
range()
- 作用
- 快速創(chuàng)建1個(gè)被觀察者對(duì)象(
Observable
) - 發(fā)送事件的特點(diǎn):連續(xù)發(fā)送 1個(gè)事件序列渔欢,可指定范圍
- 快速創(chuàng)建1個(gè)被觀察者對(duì)象(
a. 發(fā)送的事件序列 = 從0開(kāi)始墓塌、無(wú)限遞增1的的整數(shù)序列
b. 作用類(lèi)似于intervalRange()
,但區(qū)別在于:無(wú)延遲發(fā)送事件
- 具體使用
// 參數(shù)說(shuō)明:
// 參數(shù)1 = 事件序列起始點(diǎn);
// 參數(shù)2 = 事件數(shù)量苫幢;
// 注:若設(shè)置為負(fù)數(shù)访诱,則會(huì)拋出異常
Observable.range(3,10)
// 該例子發(fā)送的事件序列特點(diǎn):從3開(kāi)始發(fā)送,每次發(fā)送事件遞增1韩肝,一共發(fā)送10個(gè)事件
.subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "開(kāi)始采用subscribe連接");
}
// 默認(rèn)最先調(diào)用復(fù)寫(xiě)的 onSubscribe()
@Override
public void onNext(Integer value) {
Log.d(TAG, "接收到了事件"+ value );
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "對(duì)Error事件作出響應(yīng)");
}
@Override
public void onComplete() {
Log.d(TAG, "對(duì)Complete事件作出響應(yīng)");
}
});
- 測(cè)試結(jié)果
rangeLong()
- 作用:類(lèi)似于
range()
触菜,區(qū)別在于該方法支持?jǐn)?shù)據(jù)類(lèi)型 =Long
- 具體使用
與range()
類(lèi)似,此處不作過(guò)多描述
至此哀峻,關(guān)于 RxJava2
中的創(chuàng)建操作符講解完畢涡相。
4. 實(shí)際開(kāi)發(fā)需求案例
- 下面,我將講解創(chuàng)建操作符的1個(gè)常見(jiàn)實(shí)際需求案例:網(wǎng)絡(luò)請(qǐng)求輪詢(xún)
- 該例子將結(jié)合
Retrofit
和RxJava
進(jìn)行講解
具體請(qǐng)看文章:Android RxJava 實(shí)際應(yīng)用案例講解:網(wǎng)絡(luò)請(qǐng)求輪詢(xún)
5. Demo地址
上述所有的Demo
源代碼都存放在:Carson_Ho的Github地址:RxJava2_創(chuàng)建操作符
喜歡的麻煩點(diǎn)個(gè)
star
剩蟀!
6. 總結(jié)
- 下面漾峡,我將用1張圖總結(jié)
RxJava2
中常用的創(chuàng)建操作符
- Carson帶你學(xué)RxJava系列文章:
入門(mén)
Carson帶你學(xué)Android:這是一篇清晰易懂的Rxjava入門(mén)教程
Carson帶你學(xué)Android:面向初學(xué)者的RxJava使用指南
Carson帶你學(xué)Android:RxJava2.0到底更新了什么?
原理
Carson帶你學(xué)Android:圖文解析RxJava原理
Carson帶你學(xué)Android:手把手帶你源碼分析RxJava
使用教程:操作符
Carson帶你學(xué)Android:RxJava操作符教程
Carson帶你學(xué)Android:RxJava創(chuàng)建操作符
Carson帶你學(xué)Android:RxJava功能性操作符
Carson帶你學(xué)Android:RxJava過(guò)濾操作符
Carson帶你學(xué)Android:RxJava組合/合并操作符
Carson帶你學(xué)Android:RxJava變換操作符
Carson帶你學(xué)Android:RxJava條件/布爾操作符
實(shí)戰(zhàn)
Carson帶你學(xué)Android:什么時(shí)候應(yīng)該使用Rxjava喻旷?(開(kāi)發(fā)場(chǎng)景匯總)
Carson帶你學(xué)Android:RxJava線(xiàn)程控制(含實(shí)例講解)
Carson帶你學(xué)Android:圖文詳解RxJava背壓策略
Carson帶你學(xué)Android:RxJava生逸、Retrofit聯(lián)合使用匯總(含實(shí)例教程)
Carson帶你學(xué)Android:優(yōu)雅實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求嵌套回調(diào)
Carson帶你學(xué)Android:網(wǎng)絡(luò)請(qǐng)求輪詢(xún)(有條件)
Carson帶你學(xué)Android:網(wǎng)絡(luò)請(qǐng)求輪詢(xún)(無(wú)條件)
Carson帶你學(xué)Android:網(wǎng)絡(luò)請(qǐng)求出錯(cuò)重連(結(jié)合Retrofit)
Carson帶你學(xué)Android:合并數(shù)據(jù)源
Carson帶你學(xué)Android:聯(lián)想搜索優(yōu)化
Carson帶你學(xué)Android:功能防抖
Carson帶你學(xué)Android:從磁盤(pán)/內(nèi)存緩存中獲取緩存數(shù)據(jù)
Carson帶你學(xué)Android:聯(lián)合判斷
歡迎關(guān)注Carson_Ho的簡(jiǎn)書(shū)
不定期分享關(guān)于安卓開(kāi)發(fā)的干貨,追求短且预、平槽袄、快,但卻不缺深度锋谐。