重学rx(三)


一 前言git

      被观察者也进行了分门别类,链式调用、切换线程也进行了源码查看,可是仍然感受本身的思想不够rx,即便如今我进行subject的学习,全部的操做符也都过一遍,估计仍然不能让个人思想变得rx,这和我重学rx的初衷相违背。我必须放慢脚步去思考究竟是哪里出了问题了。因而我请教了大神,给个人指导缺乏实战 ,让我多思考哪些地方能够经过rx组织 。可是个人思惟中并无这种模式,这就迫使我去改变个人学习思路:去读别人的源码,找到这种思惟模式,融入本身。可是不少库都是利用subject去封装的。因而这篇准备去阐述subject,以后开始经过rx组织逻辑代码github

二 关于Subject 安全

       它既是被观察者,仍是观察者(这里主要讲解它是被观察者的一些特性,它是观察者知道就好)。它是热流(容易出现错误真正关心的事情) 。它作为被观察者时候它对外暴露了onNext等方法(只要拥有对象就能够任意发送流,滥用明显)。它不是线程安全的(事务的原子性)。关于它的最经常使用的有五个子类:mvvm

  • ReplaySubject (释放接收到的全部数据)
  • BehaviorSubject (释放订阅前最后一个数据和订阅后接收到的全部数据)
  • PublishSubject (释放订阅后接收到的数据)
  • AsyncSubject (仅释放接收到的最后一个数据)
  • SerializedSubject(串行Subject)
  • 关于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我目前知道的全部的知识。关于更多文章的更新,我想应该在我读完这个源码后再去分享一些心得。

    相关文章
    相关标签/搜索