Android Jectpack之viewModel的学习

藏宝库编辑 2024-9-17 01:52:10 112 0 来自 中国
1、videModel是怎样创建的?何时创建的?怎样烧毁viewModel?
答:viewModel的初始化很简朴,使用ViewModelProvider就可以创建ViewModel实例。
第一步:了解下构造方法;
viewModelProvider的构造方法中,必要两个参数,一个是viewModelStoreOwner,一个是Factory.这两个参数中viewModelStoreOwner是存放viewModel对象的。Factory类是负责创建viewModle实例的。
第二步;通过viewModelProvider对象的get()方法获取viewModel实例,
此中viewModel有两种,一种是AndroidViewModel和viewModel,AndroidViewModel传入的参数是Application.,全局的生命周期。
viewModel怎样烧毁?分为在Activity中的烧毁过程和在Fragment中的烧毁过程
    1.在Activity中的烧毁。
在ComponentActivity的构造方法中,可以看到通过Lifecycle在ON_DESTROY变乱中烧毁ViewModel。
       2.在Fragment中的烧毁。
起首通过代码跟踪到ViewModelStore的clear()方法调用的地方,在FragmentManagerViewModel类的clearNonConfigState()方法中找到了ViewModel的烧毁逻辑。
2、viewModel的生命周期怎样和组件的生命周期绑定?
答:紧张还是通过Lifecyle与组件的生命周期方法来举行回调管理的。
3、为什么Activity重修时,viewModel生存的数据没有丢失?
在Activity重修时会实行destory生命周期变乱,那么为什么ViewModel没有烧毁呢?
通过对ComponentActivity的getViewModelStore()方法举行分析。可以找到这个题目的答案。


可以看大mViewModelStore变量如果是null的话,会从NonConfigurationInstances实例中取实例。
4、Fragment之间怎样共享viewModel?
答:在分析ViewModel的烧毁过程时,我们看到Activity与Fragment存储VieModel是分离的,那么同一个Activity下的Fragment是怎样共享ViewModel的呢?
它们实在共享的是Activity的ViewModel。


这个实现的逻辑就在activityViewModels()中。


在activityViewModels()的实现中可以看到是requireActivity()获取的viewModelStore。以此来实现共享ViewModel。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 16:09, Processed in 0.164456 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表