技术学习
今日的技术学习内容为ViewModel和LiveData,这部分的内容相当于就是Android的架构学习,了解一个Android项目由哪些部分组成,如何去按照规范分层编写代码。
Android架构
MVVM(Model-View-ViewModel)
Google 2015年I/O大会上推出了DataBinding的框架,使用了MVVM的模式,MVVM的思想就是从APP的业务逻辑中分离数据持久层。
-
Model: 实体类模型。Model提供了数据提取接口供ViewModel使用,经过数据转换和操作最终映射绑定到View层的某个UI元素的属性上。
-
View: 对应Activity和XML布局文件。不进行业务代码的编码,主要作用初始化控件,处理事件。简单地说:View层不做任何业务逻辑、不涉及操作数据、不处理数据,UI和数据严格的分开。
-
ViewModel: 负责完成View和Model之间的交互。ViewModel只做和业务逻辑和业务数据相关的事,不做任何和UI相关的事情,ViewModel 层不会持有任何控件的引用,更不会在ViewModel中通过UI控件的引用去做更新UI的事情。
AAC(Android Architecture Components)
Google 2017年I/O大会上发布了AAC,个人感觉就是在上述MVVM的基础上封装好了所有实现的组件,开发者仅需调用即可。其包含一下框架或者组件:
- ROOM: 类似于JPA的持久层框架,用于数据的持久化解决方案。
- WorkManager: 管理后台任务,类似于一个框架去管理后台的Service。
- Lifecycle: 存储生命周期状态并且允许其它组件访问。
- ViewModel: 上面MVVM架构中的ViewModel的实现,专注于业务的处理。
- LiveData: 使用LiveData构建数据对象,在数据改变的时候,UI改变。
- Navigation:导航,负责页面的跳转。
重点在于Room、ViewModel、LiveData、Navigation的使用,前面已经学习了Navigation,主要用于Fragment的跳转,可以定义不同的action,执行去执行该Action来进行不同Fragment的跳转。下面学习比较重要的ViewModel和LiveData。
LiveData
观察者模式
之前一直没有领悟到观察者模式的精髓,在Android中有很多地方都使用了观察者模式,比如,监听点击事件。对于观察者来说,它并不关心观察对象的数据是如何过来的,而只关心数据过来后进行怎样的处理。
LiveData格式
在写代码的时候根据固定的格式可以很轻松的写出LiveData的数据观察,ViewModel中定义LiveData,Fragment或者Activity中绑定ViewModel,然后监听LiveData的改变。
|
|
在其中有几个点需要明确一下:
-
MutableLiveData: 父类LiveData
- LiveData中的类型如果是实体类则可以指定某个字段的数据更新,而MutableLiveData则要整个实体类或者基础数据类型的值发生改变话才会通知,不会具体到细节。
- LiveData不可变,MutableLiveData可变。重点说下可变和不可变,LiveData的属性为protected,而MutableLiveData为public
-
viewLifecycleOwner: 这里的为什么不用this,下面这篇博文讲的很好。
LiveData原理
原理直接看博文吧,这个博主的系列都值得一看。
ViewModel
ViewModel将数据的处理和View层剥离开来,专注于数据的处理。这部分的代码比较容易理解,具体直接看官方文档的ViewModel即可。
https://developer.android.com/topic/libraries/architecture/viewmodel?hl=zh-cn