Android 勤用RXJava compose操作符消除重复代码
2017-08-05 23:13
369 查看
相信小伙伴在使用RXJava与Retrofit请求网络时,都有遇到过这样的场景,在IO线程请求网络解析数据,接着返回主线程setData、更新View试图,那么也肯定熟悉下面这几句代码:
如果网络请求的次数比较少, 作为一名不拘小节(懒癌)的中二青年还能勉强接受复制粘贴上述切换schedulers的代码,但是如果请求网络的biz次数多起来了,又不想去破环RX的链式结构,那么怎么办呢?其实使用compose操作符每次仅书写一行代码就能完成工作线程的切换了!
先看最终效果:
仅仅通过
简单啰嗦下compose操作符的原理 :
不同于map、flatMap等lift操作改变Observable发布的事件及序列,compose操作符是直接对当前Observable进行操作(可简单理解为不停地.方法名().方法名()链式操作当前Observable),所以我们自然可以把切换线程的操作加入这里。
那么动手吧~
1.首先compose()需要传入一个Observable.Transformer类型的参数,那我们直接在这new一个即可;
2.在上述transformer对象里,我们通过重写call 方法,可以拿到一个observable对象,对其进行一系列的lift变换(自然可以切换线程);
3.收工吃饭~
.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)
相关文章推荐
- 使用函数式编程消除重复无聊的foreach代码(Scala示例)
- Android:自定义Activity基类,复用布局/控件,减少设置控件的重复代码,onPostOnCreate
- Android中如何优雅的处理重复点击实例代码
- Android 隔一段时间重复执行某代码
- awk消除重复代码的方案1
- Android编程思想,面向对象程序设计第四篇——继承(上)重复代码放在基类
- .NET:用T4消除代码重复,对了,也错了
- android之输入内容会进行联想并且消除重复项
- Scala新手指南中文版 -第十篇 Staying DRY with higher-order functions(用高阶函数来消除重复代码)
- C++编译重复代码消除
- 消除重复代码的意义
- 最少代码实现Android简单计算器(已经消除常见bug)
- android 自定义控件字体,解决字体偏移,卡顿,代码重复等问题
- 1.C#中通过委托Action消除重复代码
- 2.C#中通过委托Func消除重复代码
- Android之include避免代码重复
- 【android】如何有效的减少重复的代码
- delphi2009——delphixe2,用匿名函数消除重复代码
- 如何消除重复代码
- android自定义LoadPager页面,再也不用担心重复的代码啦