具体说说MVVM

MVVM架构是一种现代Android开发模式,强调数据与视图的双向绑定,降低耦合度。响应式编程使得数据变化自动反映到界面,LiveData组件解决了内存泄漏和Activity停止导致的空指针问题。ViewModel在Activity重建时保持状态,简化业务逻辑。LiveData基于观察者模式,确保只在观察者活跃时更新界面。

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

MVVM

说这个之前先说说什么是响应式编程:
响应式编程:
就是事先构建好事物之间的联系,他们之间因为这层联系而互相驱动.

架构介绍
MVVM的特点就是双向绑定

Model数据模型,比如我们从数据库或者网络获取数据。View视图,也就是我们的xml布局文件和Activity。ViewModel关联层,将Model和View绑定,使他们之间可以相互绑定实时更新

模型联系
View --> ViewModel -->View,双向绑定,数据改动可以反映到界面,界面的修改可以反映到数据。ViewModel --> Model, 操作一些我们需要的数据。

MVVM有哪些特点:
1 解决了各个层级之间耦合度太高的问题,也就是更好的完成了解耦。MVP层中,Presenter还是会持有View的引用,但是在MVVM中,View和Model进行双向绑定,从而使viewModel基本只需要处理业务逻辑,无需关系界面相关的元素了。

2 解决了代码量太多,或者模式化代码太多的问题。由于双向绑定,所以UI相关的代码就少了很多,这也是代码量少的关键。而这其中起到比较关键的组件就是DataBinding,使所有的UI变动都交给了被观察的数据模型。

3 解决了可能会有的内存泄漏问题。MVVM架构组件中有一个组件是LiveData,它具有生命周期感知能力,可以感知到Activity等的生命周期,所以就可以在其关联的生命周期遭到销毁后自行清理,就大大减少了内存泄漏问题。

4 解决了因为Activity停止而导致的View空指针问题。在MVVM中使用了LiveData,那么在需要更新View的时候,如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件。也就是他会保证在界面可见的时候才会进行响应,这样就解决了空指针问题。

ViewModel定义:
官方是这样定义的: 以注重生命周期的方式管理和存储相关数据

ViewModel原理:
ViewModel在2.0之前是在activity上面添加一个HolderFragment,然后设置setRetainInstance(true),这个方法的作用是在activity重新构建的时候能存活下来. 存储到一个ViewModelStore容器里的,那么这个空的fragment就可以用来管理这个容器,只要Activity处于活动状态,HolderFragment也就不会被销毁,就保证了ViewModel的生命周期。

而且设置setRetainInstance(true)方法可以保证configchange时的生命周期不被改变,让这个Fragment在Activity重建时存活下来。
在2.0之后有了androidx的支持: 然后用到了onRetainNonConfigurationInstancegetLastNonConfigurationInstance方法,这两个方法是在横竖屏切换的时候能保存ViewModel状态,然后恢复. 其中onRetainNonConfigurationInstance存储ViewModelStore,getLastNonConfigurationInstance获取ViewModelStore同时由于实现了LifecycleOwner接口,所以能利用Lifecycles组件组件感知每个页面的生命周期,就可以通过它来订阅当Activity销毁时,且不是因为配置导致的destory情况下,去清除ViewModel,也就是调用ViewModelStore的clear方法。

LiveData原理。
LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力
主要思想就是用到了观察者模式思想 ,所以一般被用到ViewModel中,ViewModel负责触发数据的更新,更新会通知到LiveData,然后LiveData再通知活跃状态的观察者。

说到原理,其实就是两个方法:
订阅方法,也就是observe方法
回调方法,也就是onChanged方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

scenelyLiu

您的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值