viewModel是实现mvvm架构的重要组件,主要用于解决两个问题,一是减轻Actiyity/Fragment的负担,在传统的架构下Activity需要承担ui展示刷新,逻辑处理和网络回调等等任务,随着项目复杂会变得难以维护,可以用viewModel存放与界面有关的数据和网络请求等等。二是解决横竖屏旋转时Activity重新调用onCreate()方法,会丢失掉原本数据的问题。
解决第二个问题的原因是一个ViewModel的生命周期要比它所绑定的Activity长,重新创建的Activity所获得的ViewModel实例仍然是旋转之前所绑定的实例,因此数据不会丢失。
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
通过这种方式获得ViewModel实例,下面具体看看是怎样绑定ViewModel和Activity并且实现ViewModel实例唯一性的。
首先获取这个Activity的application实例,可以看到传入第二个参数是一个工厂,它是用来解决ViewModel构造函数有参数的问题的,使用的时候继承ViewProvider.Factory并且重写create(