一 前言
被观察者也进行了分门别类,链式调用、切换线程也进行了源码查看,但是仍然感觉自己的思想不够rx,即使现在我进行subject的学习,所有的操作符也都过一遍,估计仍然不能让我的思想变得rx,这和我重学rx的初衷相违背。我必须放慢脚步去思考到底是哪里出了问题了。于是我请教了大神,给我的指导缺少实战 ,让我多思考哪些地方可以通过rx组织 。但是我的思维中并没有这种模式,这就迫使我去改变我的学习思路:去读别人的源码,找到这种思维模式,融入自己。但是很多库都是利用subject去封装的。于是这篇准备去阐述subject,之后开始通过rx组织逻辑代码。
二 关于Subject
它既是被观察者,还是观察者(这里主要讲解它是被观察者的一些特性,它是观察者知道就好)。它是热流(容易出现错误真正关心的事情) 。它做为被观察者时候它对外暴露了onNext等方法(只要拥有对象就可以任意发送流,滥用明显)。它不是线程安全的(事务的原子性)。关于它的最常用的有五个子类:
关于SerializedSubject对象不能通过create方法去获取,但是可以通过前4个对象,然后调用toSerialized
方法可以转换成这个对象。
关于更多subject的细节内容,通过查看这篇文章即可,这里没有必要再阐述一番。
三 寻找rx思维模式
我们抛开代码思考:就现有的知识,用rx去实现mvvm的过程中我们可能遇到什么问题?
1.我们怎么让数据只绑定一次控件,然后只改变数据就可更新UI?
2.我们怎么去监听数据的变化?
答1:把数据绑定UI代码写到下流。
答2:通过google的LiveData去监听数据变化,在数据变化的时候去发射新数据即可。
这样我们就能保证只要数据改变,完成所有代码复用,实现mvvm核心:数据驱动UI。
tips:相比较依赖databinding去实现的mvvm,这简直是质的飞跃,终于不用在布局文件中写伪代码。
tips:这个mvvm并不一定非要依赖LiveData去实现,我们完全可以抛弃监听数据改变这一层,暂时不讨论。
这里的难点是怎么把Livedata封装到rx中,也就是把LiveData转换成Rx。
四 读开源项目
接下来就是要寻找一个合适的开源项目,然后落实到代码上,当具备抽象成rx的思维之后,我想mvvm的难点也就不攻自破了。文章截至到这里,我已经分享了关于mvvm我目前知道的所有的知识。关于更多文章的更新,我想应该在我读完这个源码后再去分享一些心得。