在用过Rxjava一段时间感触:
1.切换线程很方便
2.代码结构更清晰
困惑:抛开切换线程不讲,它是怎么做到让代码结构变得清晰的呢,怎么封装的呢,针对代码优化而言,我即使不用Rxjava也不会怎么样吧...
特别是读了大神这两篇文章后,这种感觉更强烈..
1.Rxjava详解: 给 Android 开发者的 RxJava 详解
2.Rxjava原理:IAM四十二:RxJava 是如何实现线程切换的(上) - 掘金
文章讲得很棒!但是,矫情的说,我没有参与Rxjava的编写过程,了解了用法与原理,也始终不明白其内部的演进过程,我迫切需要一个简单的Demo来拯救我....
外来的和尚会念经:
NotRxJava懒人专用指南-RxJava的演进过程https://blog.csdn.net/oncealong/article/details/51753275?locationNum=16&fps=1
这篇拯救了我,当做是看完文章后,自己重新临摹吧
演进过程:
1.需求:获取所有的猫咪图片,并找出最可爱的猫咪,保存后返回uri
1.0版本诞生:

需求更改:获取图片要从网络获取
理解:
1>获取数据:耗时操作,异步处理数据
2>数据请求success后的处理
3>数据请求onError后的处理
1.1版本诞生:

需求变更:获取最可爱的猫咪后,uri要上传到服务器
OK,和刚才同理

列出两个接口的具体方法,站在代码优化的角度,看出接下来的方向

问题: 接口中都有onSuccess与onError的回调
优化: 通用的接口类
1.2版本诞生:


代码优化: 是不是发现queryCats与store方法中,都有Callback参数,这个可不可以抽取出来呢??
so,1.3版本诞生:


命名我用Rxjava中的命名形式,这样感觉更有代入感...
有没有感觉有一点点Rxjava的影子了呢
But:代码仍需优化
1.整体的结构嵌套还是很严重
2.业务代码明明只有queryCats(),findCutest(),store()这几行,可是第一眼看上去全是样板代码
3.全是subscribe(),就不能调用一次吗??最后回调给我uri就可以了...
首先拿findCutest()开刀:



做过这一系列操作后,呈现的就是刚才上面的形式,但是...还有嵌套...
那么对猫咪进行保存flatMap方法,返回uri呢...同理...不做阐述,给各位看官当做作业了
具体实现自行脑补(最后实现的形式)

最后这种形式是不是和当初最简单的三行代码是一致的呢
现在与Rxjava是不是大同小异了呢

以上所有代码:https://github.com/guohaiping521/RxJavaDemo
网友评论