ViewModelProvider 构造函数之间有什么区别
what is the difference between ViewModelProvider constructors
我正在学习 ViewModel,我想知道这些获取 ViewModelProvider
实例的方法之间有什么区别吗?
方法一:
ViewModelProvider viewModelProvider = new ViewModelProvider(getViewModelStore(),
ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication()));
mViewModel = viewModelProvider.get(NoteActivityViewModel.class);
方法B:
mViewModel = new ViewModelProvider(this).get(NoteActivityViewModel.class);
根据 ViewModelProvider(ViewmodelStoreOwner)
documentation:
This method will use the default factory if the owner implements HasDefaultViewModelProviderFactory
. Otherwise, a ViewModelProvider.NewInstanceFactory
will be used.
并且根据 Lifecycle 2.2.0 release notes(添加该构造函数时):
You can pass a Fragment
or FragmentActivity
to the new ViewModelProvider(ViewModelStoreOwner)
constructor to achieve the same functionality when using Fragment 1.2.0.
并且 Fragment 1.2.0 release notes 指出:
SavedStateViewModelFactory
is now the default factory used when using by viewModels()
, by activityViewModels()
, the ViewModelProvider
constructor, or ViewModelProviders.of()
with a Fragment.
所以 new ViewModelProvider(this)
使用 SavedStateViewModelFactory
,除了支持 Saved State module for ViewModel.
之外,它还提供了 AndroidViewModelFactory
提供的所有内容
在使用 Fragment 1.2.0 或更高版本时,没有理由将 ViewModelProvider
与标准工厂之一一起使用 - 该构造函数只有在您拥有自己的自定义工厂时才有用。
我正在学习 ViewModel,我想知道这些获取 ViewModelProvider
实例的方法之间有什么区别吗?
方法一:
ViewModelProvider viewModelProvider = new ViewModelProvider(getViewModelStore(),
ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication()));
mViewModel = viewModelProvider.get(NoteActivityViewModel.class);
方法B:
mViewModel = new ViewModelProvider(this).get(NoteActivityViewModel.class);
根据 ViewModelProvider(ViewmodelStoreOwner)
documentation:
This method will use the default factory if the owner implements
HasDefaultViewModelProviderFactory
. Otherwise, aViewModelProvider.NewInstanceFactory
will be used.
并且根据 Lifecycle 2.2.0 release notes(添加该构造函数时):
You can pass a
Fragment
orFragmentActivity
to the newViewModelProvider(ViewModelStoreOwner)
constructor to achieve the same functionality when using Fragment 1.2.0.
并且 Fragment 1.2.0 release notes 指出:
SavedStateViewModelFactory
is now the default factory used when usingby viewModels()
,by activityViewModels()
, theViewModelProvider
constructor, orViewModelProviders.of()
with a Fragment.
所以 new ViewModelProvider(this)
使用 SavedStateViewModelFactory
,除了支持 Saved State module for ViewModel.
AndroidViewModelFactory
提供的所有内容
在使用 Fragment 1.2.0 或更高版本时,没有理由将 ViewModelProvider
与标准工厂之一一起使用 - 该构造函数只有在您拥有自己的自定义工厂时才有用。