作用:
数据容器
特点:
1.单一职责,将数据从业务中抽离出来。
2.生命周期长,存在于所属对象(Activity,Fragment)的全部生命周期
3.扩展性好,方便与其他功能组合,例如livedata,room
使用场景:
1.横竖屏切换,Activity重建,数据可依然保存
2.同一个Activity下,Fragment之间的数据共享。
原理:
使用者通过工具类(ViewModelProvider)在拥有者(ViewModelStoreOwner,例如:Fragment,FragmentActivity)中获取数据中心(ViewModelStore,简单说就是一个Map)中的某个数据(ViewModel)。如果数据中心没有,会通过工厂(Factory)创建,最常用的工厂是AndroidViewModelFactory,它创建的数据包含Application。
注意:
1.不要把context传入Viewmodel,容易造成内存泄漏
2.同一个Activity下的fragment通过ViewModel进行数据共享时,ViewModel的拥有者是Activity,传参要注意。
网友评论