个人对Android 中的RxJava一直不是很理解,边学习边记载,如有问题,欢迎雅正.
一直搞Android Framework工程师,只有刚参加工作的时候做了一段独立三方app开发,之前工作更多的内容更多的是解决Android framework的问题,现在客串一下Android app工程师,RxJava现在很火,那就学习总结下。
在这个框架满天飞的时代,干什么都有框架完成,我还是怀念我从事Android开发的时候,那时候还是Android 2.x的刚开始的时候,没有什么框架,从网络请求到设计异步,都用的是Android和Java接口,自己写工具类。当然APP也越来越复杂了,与时俱进吧
吐槽完毕,回到正题。
RxJava的特点就是代码简洁,但是不简单,使用Rxjava不意味着你的代码量会减少,可能会增多,但是逻辑会更清晰,代码结构更容易看一点。
网上关于RxJava的介绍很多,在我看来其实就是一点, 异步处理数据(说的更直白点就是万物皆异步和UI变化皆因数据变化),减少callback,虽然我也没觉得有多好,但是很多企业或者是面试会问到,就当了解。
举一个例子来说:
比如说有一个EditText,TextView。在EditTextView上输入的内容,要在TextView上显示出来,最简单的方式就是调用TextWatcher来实现动态的变化监听,然后通过TextView的settextView把值设置进去。但是换个思路考虑,EditTextView输入的变化,其实是一种数据的变化,Textview是观察数据的变化,而修改的显示内容。更多的是一种思想的变化,由主动去做事情,变成被动等待数据变化来响应。
个人看法:别人说再好的框架,也是要结合项目和实际情况来使用的,脱离实际场景的使用,还不如不用。学习框架首先要把设计模式了解下来,所有的框架学到最后就是设计模式的代码实现方式不同,框架约学习,越觉得设计模式是个神奇东西,很重要。
RxJava第一关就是编程理念的改编,由线性直线式思维变成被动式等待观察响应。这一关过不去,RxJava就变成异步任务的替代产品了,那就没有意义了。
先了解第一个观念是响应式编程,之前的面向切面编程等都是一种编程理念,没啥特别的,就当做是为了解决一类场景而提炼凝结的一种理念而已。
响应式编程个人理解就是基于数据流的模型的观察者模式的异步操作数据思想。
就像一条河,在这条河上有多个抽水站,人要喝水。解释:河就好比Android里面的各种数据,这个数据有一个源头在流,但是随着流动在不断的被处理;抽水站就好比一个个观察者,只有水流到这个抽水点,才能抽水,否则无法抽取,这就像是观察者也是只观察一个对象的变化,只对自己观察的对象变化做响应;人要喝水就是个异步操作,水在抽水站处理净化到水龙头流出,再加热煮沸,这是个耗时的操作,人在等待的期间可以去做别的事情,水烧好了,喝而已。
在Android中有一个场景就很像,一次HTTP请求获取一个json数据,这时候判断里面是否有图片,如果有图片,通知观察者响应启动下载图片的数据流,解析成一张图片,显示在ImageView中。下载解析成图片是异步操作。观察有没有图片,数据在不断的被加工。