
ViewModelProvider(activity)[YourViewModel::class.java]�我们日常都是如此获得ViewModel的,那你知道ViewModelProvider到底是怎么获得ViewModel的吗?ViewModel又是如何跟activity/fragment之间绑定的?上图整理了相关类之间的关系。
- ViewModelProvider 是如何对外提供 ViewModel的
ViewModelProvier 中有两个重要成员变量:ViewModelStore 和 Factory。Factory 负责创建 ViewModel,ViewModelStore 负责存储 ViewModel。ViewModleProvier 就是通过这两个成员变量来对外提供 ViewModel
- ViewModel 是如何跟activity/fragment之间绑定的
activity 直接继承了ViewModelStoreOwner、HasDefaultViewModelProviderFactory 这两个接口,换句话来说acivity本身就持有了ViewModelStore 和 Factory。ViewModelStore中存储 ViewModel 的 hashtagMap 是activity 成员变量的成员变量,就这样 activity 和 ViewModel就绑定到了一起。
总结:
- Factory、 ViewModelStore、ViewModelStoreOwner 源码里面的命名规则其实就已经把中间的逻辑关系描述清除了。
- 由于只能继承一个父类,但是可以继承多个接口。这里 activity 通过继承 ViewModelStoreOwner 接口,接口中又提供了 getViewModelStore():ViewModelStore 方法,间接让 activity 持有了ViewModelStore。
ViewModelProvider通过ViewModelStore和Factory管理ViewModel的创建与存储。Factory负责实例化ViewModel,而ViewModelStore则保存这些实例。activity作为ViewModelStoreOwner,持有ViewModelStore,从而实现了ViewModel与activity的绑定。这种设计允许activity和ViewModel之间的生命周期关联,确保数据在配置变更时得以保留。
477

被折叠的 条评论
为什么被折叠?



