ViewModel生命周期疑问
网上搜到的一些说法是跟随宿主
val viewModel = ViewModelProvider(this).get(HiViewModel::class.java)
this 就是宿主上下文
然后课程分析ViewModel的数据保存与恢复,实际上利用到了ActivityThread,那么按这个理论,ViewModel的生命周期应该比宿主长才对,那么ViewModel具体的生命周期是怎样的呢(创建和销毁的时机是怎样的)
请教一下老师,有没推荐文章看下,或者详细说下,网上说法感觉不太准确
正在回答
ViewModel的数据保存与恢复,实际上利用到了ActivityThread,那么按这个理论,ViewModel的生命周期应该比宿主长才对,那么ViewModel具体的生命周期是怎样的呢。
这段理解是没问题的话哈
1. 有一点要了解我们获取viewmodel的时候,源码跟进去,你会发现是从viewModelStore中获取得到的
2. 在activity 因为内存不足或系统配置变更导致的activity 被销毁时,会执行onsavedInstance方法,入参为bundle,activity 会把viewModelStore实例对象存储在NoConfigrationInstance对象里,进而存储在bundle中。此时是不是意味着虽然activity 即将被销毁但是viewModelStore ,以及viewModel是被保存了下来的。
3. 当activity 恢复重建时,onCreate有个bundle入参,会把之前保存的对象传递过来,新的activity 实例会从bundle 中解析并恢复viewModelStore ,进而能够恢复viewModel 。
4. 以上是activity 被异常销毁时才会触发的。当activity 正常执行finish被销毁时,在ComponentActivity源码中你可以看到会触发viewModelStore 的onClear方法。这也意味着viewModel 即将被销毁
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星