ViewModel实例在不同宿主中的应用

1. 作用域决定 ViewModel 的实例

若以 Activity 为作用域:

所有 Fragment 通过 ViewModelProvider(requireActivity()) 获取的 ViewModel 是同一个实例。

若以 Fragment 自身为作用域:

每个 Fragment 通过 ViewModelProvider(this) 获取的 ViewModel 是不同的实例。

2. 生命周期与数据共享

以 Activity 为作用域:

ViewModel 的生命周期与 Activity 绑定,当 Activity 销毁时才会清除。

适合多个 Fragment 之间需要共享数据的场景(如购物车状态、用户信息)。

以 Fragment 自身为作用域:

ViewModel 的生命周期与 Fragment 绑定,当 Fragment 销毁时清除。

适合仅在单个 Fragment 内部使用的临时数据。

3. 核心原理

ViewModelStore:

每个 ViewModelStoreOwner(如 Activity 或 Fragment)内部维护一个 ViewModelStore,用于存储 ViewModel 实例。

当作用域是 Activity 时,所有 Fragment 共享 Activity 的 ViewModelStore。

当作用域是 Fragment 时,每个 Fragment 拥有独立的 ViewModelStore。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容