博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 勤用RXJava compose操作符消除重复代码
阅读量:4462 次
发布时间:2019-06-08

本文共 1287 字,大约阅读时间需要 4 分钟。

相信小伙伴在使用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)

转载于:https://www.cnblogs.com/zhujiabin/p/7291894.html

你可能感兴趣的文章
linux 小技巧(磁盘空间搜索)
查看>>
iOS开发——捕获崩溃信息
查看>>
(for 循环)编程找出四位整数 abcd 中满足 (ab+cd)(ab+cd)=abcd 的数
查看>>
tomcat使用spring-loaded实现应用热部署
查看>>
boost1.53中的lock-free
查看>>
链表_leetcode203
查看>>
基于ajax 的 几个例子 session ,ajax 实现登录,验证码 ,实现ajax表单展示
查看>>
连接不上sql server服务器的解决方案
查看>>
记录安装oracle的那些事(二)之双系统安装
查看>>
c3po数据库连接池中取出连接
查看>>
bootstrap-table 分页
查看>>
使用本机IP调试web项目
查看>>
【Java面试题】58 char型变量中能不能存贮一个中文汉字?为什么?
查看>>
C++ Primer 第六章 函数
查看>>
交互设计算法基础(3) - Quick Sort
查看>>
Ubuntu各种软件的安装
查看>>
智能社的邀请码
查看>>
算法与分析 统计数字问题和整数因子分解问题?
查看>>
变量提升
查看>>
谜题88:原生类型的处理
查看>>