前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MVVM归纳总结

MVVM归纳总结

作者头像
木溪bo
发布2022-04-02 15:17:47
9760
发布2022-04-02 15:17:47
举报

MVVM是Model-View-ViewModel的缩写。是谷歌推出的AAC(Android Architccture Components)中的组件实现的官方项目框架。主要使用LiveData,ViewModel,DataBinding打造MVVM框架,其他组件是附加的功能。

1、LifeCycle:主要是让自定义类继承它,通过在四大主件和application中绑定后,通过在LifeCycle它的子类中对自定义的方法加上生命周期注解后,实现对它父组件的生命周期进行监听。避免父组件destory销毁后,还无法释放内存,造成内存泄露。

2、LiveData:主要用于给数据套壳包裹,使数据带有观察者模式特性。当数据变化时,会回调的到该数据的监听方法中。LiveData一般就是与ViewModel结合,对ViewModel里面的数据套壳,对数据监听。还会与Room新数据库组件搭配使用,监听数据库数据变化。

3、ViewModel:类似于实现了数据持久化的一个类,继承于它的子类不用担心页面重建而丢失数据,会被保存,除非页面destory了。在里面也可以实现业务逻辑的处理。

4、Model:之前开发中习惯的Bean功能类,存储数据的数据模型。

5、View:与MVC区别于分离了activity,特指我们看的见的UI布局。

6、DataBinding:不与LifeCycle和ViewModel使用,只是实现数据绑定,可单向也可双向。要使用Databinding那应该是使用DataBinding+ViewModel+LiveData,三者缺一不可。双向绑定使用在特定的控件如输入型的EditText、CheckBox上,直接在XML布局中调用Model类中方法的notifyPropertyChanged(BR.xxx)刷新数据。可以自定义图片额外属性BindingAdapter类,设置网络图片背景加载功能等。DataBinding设置的对象变量在于视图View控件绑定后,变量改变了则视图View控件的值也会一起变,有点类似LiveData监听了。

7、ViewBinding:ViewBinding只是为了替代findViewById。涉及数据绑定还是要用DataBinding。相较于DataBinding的区别 ViewBinding 的功能好像更少无法进行双向绑定。但是它的优点也是明显的不需要对原有的xml 文件进行侵入,而Databinding 首先是侵入式的。

mvvp组件

image.png

image.png

8、Room:谷歌官方退出的类似于GreenDao的数据库操作库。注意Model里面如果有内部类,需要定义为静态内部类。 如下:UserInfoBean.DataBean是个静态内部类。

代码语言:javascript
复制
 @Dao
public interface UserInfoDao {
    // OnConflictStrategy.REPLACE:冲突策略是取代旧数据同时继续事务。这个模式数据取代了,并且
    // 如果使用livedata则会返回一个新的对象,原livedata监听的对象就会监听到一个null对象。事实测试证明了,只要
    //保持主键的数据不被替换取代,原livedata对象就不会为null。
    // OnConflictStrategy.ROLLBACK:冲突策略是回滚事务
    //OnConflictStrategy.ABORT:冲突策略是终止事务。
    //OnConflictStrategy.FAIL:冲突策略是事务失败。
    //OnConflictStrategy.IGNORE:冲突策略是忽略冲突。
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertUserinfo(UserInfoBean.DataBean userInfoBean);

    @Delete
    void deleteUserinfo(UserInfoBean.DataBean userInfoBean);

    @Update
    void updateUserinfo(UserInfoBean.DataBean userInfoBean);

    @Query("Select * from myUserInfo where id=:id")
    LiveData<UserInfoBean.DataBean> getUserinfoById(String id);
}

妥妥的很安卓

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022.03.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档