ActivityViewModels 和惰性 ViewModelProvider 的区别?
我见过两种初始化 View 模型的方法:
private val someViewModel: SomeViewModel by activityViewModels()
private val someOtherViewModel: SomeOtherViewModel by lazy {
ViewModelProvider(this).get(SomeOtherViewModel::class.java)
}
我知道lazy
仅在需要时初始化 ViewModel 并且 activityViewModels
对于在 fragment 之间共享数据很有用,但除此之外有什么区别?Android 文档说
activityViewModels
被限定在 Activity 范围内,但这是否意味着如果使用 activityViewModels
在同一 Activity 内的多个 fragment 中使用相同的 View 模型是否只创建了一个在所有 fragment 之间共享的实例?
最佳答案
当您调用 ViewModelProvider(this)
, this
指ViewModelStoreOwner
.
对于每个唯一的 ViewModelStoreOwner,将有一个给定 type
的唯一 ViewModel .
现在来回答这个问题。
你打电话时
private val someOtherViewModel: SomeOtherViewModel by lazy {
ViewModelProvider(this).get(SomeOtherViewModel::class.java)
}
您将获得一个范围为当前 Fragment/Activity 的 ViewModel。 Lazy
只是推迟初始化。你打电话时
private val someViewModel: SomeViewModel by activityViewModels()
您将获得一个范围为 Activity 的 ViewModel。当多个 Fragment 使用相同的代码时,它们正在请求范围为父 Activity 的 ViewModel。如果所有 Fragment 的父 Activity 相同,则 Fragments 将获得相同的 ViewModel,因为 ViewModelStoreOwner
连接到 Activity 保持不变。
关于android - ActivityViewModels 和惰性 ViewModelProvider 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68058302/