这是介绍Rxjava的第二篇文章。其实在写第一篇的时候我就犯了一个错误。(必有一失*_*)我总把它想他肯定有某一功能独有的,类似的框架肯定做不到。然后就把他和异步任务比较。但发现错了,异步任务算是一个相对底部的东西。所以基本能用它实现(这里想起了一个段子,一个码神用0和1写了一个操作系统,我去,想想真六,扯的真远)。但不得不说对比还是很有必要的,对比以后你会发现,Rx是一种封装,也是一种编程方式,在一些特定的场合使用它,会有飞一般的感觉(和太阳肩并肩)。下面我会从各种适合的场景去介绍它的使用(亮点),但博客只会有伪代码(博客中看代码心累),具体代码可以在 demo中看到,这篇博客对应的是demo 中的second。
项目中我门经常会遇到上传图片,或者文件。以前通常我会采用异步任务(有时线程自己封装)或者IntentService。
这个场景其实和网络请求类似,不就是有一段耗时的操作,操作完以后再和主线程进行交互。(机智看穿一切)虽然如此简单,但我还是不得不给出主要思路,以及实现demo。因为大多人都是写起代码就(蒙蔽))太了解程序猿了,太没办法。)
一、 异步任务:1.doInBackground(String… params)进行文件上传(文件上传不是重点,不了解的可 以demo中查看相应代码)
2.onPostExecute(String s)进行相应的UI更新。
二、IntentService: 1.使用静态函数,传递参数,并且启动IntentService
2.onHandleIntent(Intent intent)中获取参数,并且上传文件
3.上传结束后通过EventBus更新UI(这里也可以使用广播接收者
博主在逗我吗?说了和没说一样,但需要的就是这些。剩下的酒只剩填充了。具体可以在demo中查看
三、RxJava:1.在map或者create中去上传图片
2. 在subscribe中获取返回的链接,并且在可以展示
demo中看到,这篇博客对应的是demo 中的second.
比较一下
这种情景异步任务,和RxJava差不多(读书少啊 有新见解可以联系作者 )IntentService会使代码好看一些,但是交互得依赖EventBus,简单的借口,或者Handler都不行。而EventBus,多个页面时,需要注意消息的对应关系。
RxJava除了能够简单的实现线程的切换。还有一个比较厉害的地方,就是他有很多操作符。多的我都不忍心写出来(怕大家怀疑人生,RxJava操作符感兴趣的去百度)里面有一个FlatMap操作符,这个操作符你会发现,凡是介绍RxJava 都会有,但笔者这里不打算讲(就是这么任性)。demo中也不打算写。因为笔者认为它除了能在指定的地方去做一些事,规范代码意外。暂时还想不出其他方法,网上的大多实例时先进行一个耗时操作再进行一个耗时操作,笔者认为这完全可以在map 或者create中实现两个(可能笔者还没有悟透,悟透的可以联系笔者,笔者会进行修改)其他的操作符在笔者的应用场景出现的很少。也就不班门弄斧了。
最后原理我也不打算讲了,扔物线的 给 Android 开发者的 RxJava 详解(可百度)文章很给力,在这里如果大家有不了解订阅者模式的可以多对比按钮与点击事件之间的关系
文章就说到这里了,RxJava的内容就介绍到这里(当然下期Retrofit会使用到他),其实不管是RxJava还是异步任务,还是IntentService,他们的好坏写demo是不足以看出来的。只有在项目中真正的引入才能感受出,demo中的情景都过于简单。但不得不提醒的是在没有完全弄清原理前,该项目只能是练手项目,不然出了问题就不知道如何解决了。
东西好不好只有用了才知道。对他感兴趣的人,一定要用代码说话。写代码的过程远远要比想的难。最后还是那句话:
独学而无友,则孤陋而寡闻。
对文章有意见或者想交流的思想朋友可以联系我
邮箱 onlybeyond99@gmail.com