青春须早为,岂能长少年。这篇文章主要讲述Android 勤用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);
【Android 勤用RXJava compose操作符消除重复代码】仅仅通过
.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)
推荐阅读
- 在android中画圆形图片的几种办法
- Android使用token维持登陆状态的方法
- Qt For Android 开发环境配置
- Android开发-新建线程崩溃
- office2007默认保存文件格式的更改办法_其它办公
- excel拆分单元格图文步骤_Excel专区
- office word 2007文档加密的图文步骤_其它办公
- 每次打开office2007都提示安装设置的处理办法_其它办公
- wps菜单栏隐藏了怎样还原_WPS office