ViewModel的出现确实解决一个简单而又繁琐的问题,大家都知道用户在使用产品的过程中,可能随时会被中断或界面发生重建,
如果数据的丢失会造成很差的用户体验,当然现在都知道在onSaveInstanceState()中保存数据,
在界面重建时恢复数据,这种虽然可以解决问题,但会造成每个界面都要编写板寸和恢复的代
码,而且数据量过大时会影响执行性能,VIewModel的出现就是解决这个问题,它会在活动重建
时仍然保存数据,在活动创建完成后从中获取数据
ViewModel的生命周期:
- ViewModel对象的范围是在获取ViewModel时传递给ViewModelProvider的Lifecycle生命周期
- ViewModel在内存中直到Activity销毁或Fragment被移除
- 系统首次调用活动对象的onCreate()方法时,通常会请求ViewModel
- 系统可能会在整个活动的整个生命周期中多次调用onCreate(),例如当设备屏幕旋转时
- ViewModel从第一次请求ViewModel直到活动完成并销毁时存在
ViewModel的优点:
- 数据和界面的分离,使数据驱动界面
- 解决了运行中断和界面重建时的数据保存问题
- 配合LiveData实时获取最新数据
- 实现Activity中Fragment之间的数据交互
将数据保存到ViewModel中,然后为活动中添加一个HolderFragment,HolderFragment中保存了
ViewStore的实例,ViewStore中使用Map保存了ViewModel,从而在活动重新创建时获取到原来
的ViewModel
注:一般时VIewModel和LiveData组合保存可观察的数据