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
- 利用註解+反射消除重複程式碼,你學會了嗎?反射
- 如何從業務程式碼中提升技術:使用領域特定語言消除重複程式碼
- RxJava常用操作符RxJava
- RxJava操作符列表RxJava
- RxJava操作符之建立操作符(三)RxJava
- 3章 RxJava操作符RxJava
- RxJava 操作符系列二RxJava
- RxJava操作符系列一RxJava
- RxJava操作符系列二RxJava
- RxJava操作符系列三RxJava
- RxJava 操作符系列五RxJava
- RxJava操作符系列四RxJava
- RxJava操作符之組合操作符(六)RxJava
- RxJava操作符之轉換操作符(四)RxJava
- RxJava操作符之過濾操作符(五)RxJava
- part05_Rxjava操作符RxJava
- Rxjava2操作符(二)RxJava
- Rxjava2操作符(三)RxJava
- RxJava2原始碼分析(二):操作符原理分析RxJava原始碼
- RxJava 原始碼分析系列(四) -操作符變換原理RxJava原始碼
- Android RxJava使用介紹(二) RxJava的操作符AndroidRxJava
- Android RxJava使用介紹(三) RxJava的操作符AndroidRxJava
- Android RxJava使用介紹(四) RxJava的操作符AndroidRxJava
- RxJava2.x 分析原始碼,理解操作符FlatMapRxJava原始碼
- 你的程式碼有重複嗎?
- 解剖 RxJava 之變換操作符RxJava
- RxJava2 操作符總結RxJava
- RxJava2.0——變換操作符RxJava
- 解剖 RxJava 之過濾操作符RxJava
- RxJava操作符之Transforming ObservablesRxJavaORM
- 深入淺出RxJava(2):操作符RxJava
- 深入淺出RxJava(二:操作符)RxJava
- RxJava 知識梳理(2) RxJava2 操作符實戰RxJava
- Rxjava 2.x 原始碼系列 - 變換操作符 Map(上)RxJava原始碼
- 防止表單重複提交的程式碼
- jquery防止重複提交程式碼例項jQuery
- Rxjava2操作符入門(一)RxJava