RXJava compose操作符消除重複程式碼
信小夥伴在使用RXJava與Retrofit請求網路時,都有遇到過這樣的場景,在IO執行緒請求網路解析資料,接著返回主執行緒setData、更新View試圖,那麼也肯定熟悉下面這幾句程式碼:
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(subscriber);
如果網路請求的次數比較少, 作為一名不拘小節(懶癌)的中二青年還能勉強接受複製貼上上述切換schedulers的程式碼,但是如果請求網路的biz次數多起來了,又不想去破環RX的鏈式結構,那麼怎麼辦呢?其實使用compose操作符每次僅書寫一行程式碼就能完成工作執行緒的切換了!
先看最終效果:
RetrofitClient.singletonDemoService("http://gank.io/api/random/data/")
.requestNet("福利","1")
.compose(schedulersTransformer())
.subscribe(subscriber);
僅僅通過.compose(schedulersTransformer())一行程式碼就完成了執行緒切換。
簡單囉嗦下compose操作符的原理 :
不同於map、flatMap等lift操作改變Observable釋出的事件及序列,compose操作符是直接對當前Observable進行操作(可簡單理解為不停地.方法名().方法名()鏈式操作當前Observable),所以我們自然可以把切換執行緒的操作加入這裡。
那麼動手吧~
1.首先compose()需要傳入一個Observable.Transformer型別的引數,那我們直接在這new一個即可;
2.在上述transformer物件裡,我們通過重寫call 方法,可以拿到一個observable物件,對其進行一系列的lift變換(自然可以切換執行緒);
Observable.Transformer schedulersTransformer() {
return new Observable.Transformer() {
@Override
public Object call(Object observable) {
return ((Observable) observable).subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
};
}
3.收工吃飯~
observable.compose (schedulersTransformer()).subscribe(subscriber)
好了,繼續擼程式碼去啦~
相關文章
- Kotlin 使用Rxjava的compose()操作符KotlinRxJava
- 利用註解+反射消除重複程式碼,你學會了嗎?反射
- 如何從業務程式碼中提升技術:使用領域特定語言消除重複程式碼
- 3章 RxJava操作符RxJava
- RxJava操作符之組合操作符(六)RxJava
- part05_Rxjava操作符RxJava
- RxJava2原始碼分析(二):操作符原理分析RxJava原始碼
- RxJava 原始碼分析系列(四) -操作符變換原理RxJava原始碼
- RxJava2.0——變換操作符RxJava
- 解剖 RxJava 之變換操作符RxJava
- RxJava2 操作符總結RxJava
- Rxjava 2.x 原始碼系列 - 變換操作符 Map(上)RxJava原始碼
- RxJava 學習筆記 -- 條件操作符和布林操作符RxJava筆記
- RxJava2操作符學習筆記RxJava筆記
- RxJava 學習筆記 -- 變換操作符RxJava筆記
- RxJava 學習筆記 -- 過濾操作符RxJava筆記
- 幹掉 “重複程式碼” 的技巧有哪些
- Vue 消除Token過期時重新整理頁面的重複提示Vue
- RxJava2.X 學習筆記 -- 建立操作符RxJava筆記
- JVM消除重複自負引數-XX:+UseStringDeduplication的優缺點 - JAXenterJVM
- 18 位無重複訂單號生成程式碼
- retrofit如何配合Rxjava封裝程式碼RxJava封裝
- 可重複使用的水處理顆粒有效地消除了BPA
- RxJava常用操作符官方文件翻譯及Kotlin示例(1)RxJavaKotlin
- LinkedHashSet_重複號碼
- Jetpack Compose(4)——重組Jetpack
- 消除程式碼中的壞味道,編寫高質量程式碼
- 消除程式碼中的 if-else/switch-case
- 如何解決unity做遊戲面臨的重複程式碼過多 程式碼複用性差的問題Unity遊戲
- RxJava小考題 -- Rxjava原始碼分析(一)RxJava原始碼
- 【填坑往事】使用Rxjava2的distinct操作符處理自定義資料型別去重的問題RxJava資料型別
- RxJava從入門到不離不棄(四)——過濾操作符RxJava
- 重構指標之如何監控程式碼圈複雜度指標複雜度
- 複製程式碼
- RxJava學習(10):複用與joinRxJava
- 重學 JS 系列:聊聊 new 操作符JS
- 重複程式碼的剋星,高效工具 VSCode snippets 的使用指南VSCode
- RxJava是遺留程式碼的解藥 - PawełMatyjasikRxJava
- 重複