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是个静态内部类。
@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);
}
妥妥的很安卓