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