什么是 ViewModelStore 和 viewModelStoreOwner?
What is ViewModelStore and viewModelStoreOwner?
由于这个新的 ViewModelProvider,我感到很困惑 api(不推荐使用 ViewModelProvider)
与新的变化一样,也有新的构造函数(源代码)。
#1
public ViewModelProvider(@NonNull ViewModelStoreOwner owner) {
this(owner.getViewModelStore(), owner instanceof HasDefaultViewModelProviderFactory
? ((HasDefaultViewModelProviderFactory) owner).getDefaultViewModelProviderFactory()
: NewInstanceFactory.getInstance());
}
#2
public ViewModelProvider(@NonNull ViewModelStoreOwner owner, @NonNull Factory factory) {
this(owner.getViewModelStore(), factory);
}
#3
public ViewModelProvider(@NonNull ViewModelStore store, @NonNull Factory factory) {
mFactory = factory;
mViewModelStore = store;
}
Gradle 依赖性:
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc02"
所以这些构造函数需要 ViewModelStore
和 viewModelStoreOwner
。
文档:
@param store {@code ViewModelStore} where ViewModels will be stored.
@param owner a {@code ViewModelStoreOwner} whose {@link ViewModelStore} will be used to
retain {@code ViewModels}
任何人都可以定义它们、如何使用它们以及它们对我们开发人员的真正意义吗?
是 ViewModelStoreOwner==activity/fragment?
Can anyone define them and how to use them and what they really mean to us developer's?
一个ViewModelStore
可以被认为是一个容器,将ViewModels存储在一个HashMap
中。其中 key
是字符串值,值是要保存的 ViewModel(ViewModelProvider
使用 string_key
+ ViewModel class 规范名称的串联)。
A ViewModelStoreOwner
只是一个接口。任何实现此接口定义的 getViewModelStore()
的 class 成为 ViewModelStore
的所有者。这个 class 然后维护 ViewModelStore
并且应该负责在需要时适当地恢复它。
我们可以根据需求实现自己版本的owner和state。
is ViewModelStoreOwner==activity/fragment?
是的。基于 Android 源代码,Fragment
(来自 androidx.fragment.app
)和 ComponentActivity
(来自 androidx.activity
)都实现了 ViewModelStoreOwner
。这些 classes 维护一个 viewModelStore
并适当地恢复值。
由于这个新的 ViewModelProvider,我感到很困惑 api(不推荐使用 ViewModelProvider)
与新的变化一样,也有新的构造函数(源代码)。
#1
public ViewModelProvider(@NonNull ViewModelStoreOwner owner) {
this(owner.getViewModelStore(), owner instanceof HasDefaultViewModelProviderFactory
? ((HasDefaultViewModelProviderFactory) owner).getDefaultViewModelProviderFactory()
: NewInstanceFactory.getInstance());
}
#2
public ViewModelProvider(@NonNull ViewModelStoreOwner owner, @NonNull Factory factory) {
this(owner.getViewModelStore(), factory);
}
#3
public ViewModelProvider(@NonNull ViewModelStore store, @NonNull Factory factory) {
mFactory = factory;
mViewModelStore = store;
}
Gradle 依赖性:
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc02"
所以这些构造函数需要 ViewModelStore
和 viewModelStoreOwner
。
文档:
@param store {@code ViewModelStore} where ViewModels will be stored.
@param owner a {@code ViewModelStoreOwner} whose {@link ViewModelStore} will be used to retain {@code ViewModels}
任何人都可以定义它们、如何使用它们以及它们对我们开发人员的真正意义吗?
是 ViewModelStoreOwner==activity/fragment?
Can anyone define them and how to use them and what they really mean to us developer's?
一个ViewModelStore
可以被认为是一个容器,将ViewModels存储在一个HashMap
中。其中 key
是字符串值,值是要保存的 ViewModel(ViewModelProvider
使用 string_key
+ ViewModel class 规范名称的串联)。
A ViewModelStoreOwner
只是一个接口。任何实现此接口定义的 getViewModelStore()
的 class 成为 ViewModelStore
的所有者。这个 class 然后维护 ViewModelStore
并且应该负责在需要时适当地恢复它。
我们可以根据需求实现自己版本的owner和state。
is ViewModelStoreOwner==activity/fragment?
是的。基于 Android 源代码,Fragment
(来自 androidx.fragment.app
)和 ComponentActivity
(来自 androidx.activity
)都实现了 ViewModelStoreOwner
。这些 classes 维护一个 viewModelStore
并适当地恢复值。