重学rx(三)

本文探讨了RxJava在MVVM架构中的应用,分析如何利用Rx实现数据驱动UI,聚焦Subject特性和实战案例,旨在转变编程思维,提升代码组织效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一 前言

      被观察者也进行了分门别类,链式调用、切换线程也进行了源码查看,但是仍然感觉自己的思想不够rx,即使现在我进行subject的学习,所有的操作符也都过一遍,估计仍然不能让我的思想变得rx,这和我重学rx的初衷相违背。我必须放慢脚步去思考到底是哪里出了问题了。于是我请教了大神,给我的指导缺少实战 ,让我多思考哪些地方可以通过rx组织 。但是我的思维中并没有这种模式,这就迫使我去改变我的学习思路:去读别人的源码,找到这种思维模式,融入自己。但是很多库都是利用subject去封装的。于是这篇准备去阐述subject,之后开始通过rx组织逻辑代码。

二 关于Subject 

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

ReplaySubject (释放接收到的所有数据) BehaviorSubject (释放订阅前最后一个数据和订阅后接收到的所有数据) PublishSubject (释放订阅后接收到的数据) AsyncSubject (仅释放接收到的最后一个数据) SerializedSubject(串行Subject)

关于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我目前知道的所有的知识。关于更多文章的更新,我想应该在我读完这个源码后再去分享一些心得。


转载于:https://juejin.im/post/5caeff7f5188251b2b20b229

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值