我试图理解为什么ActivityRetainedScoped
为希尔特的 DI 引入。在我看来,范围与ViewModelScoped
应该做。我的印象是作用域是这样工作的:
AppScope (singleton) > ViewModelScope > ActivityScope > ViewScope > ...
But 这个图形 https://developer.android.com/images/training/dependency-injection/hilt-hierarchy.svg有点暗示 ViewModel 和 Activity 范围是......兄弟姐妹?
根据文档:
“ActivityRetainedComponent 存在于配置更改中,因此它
在第一个 Activity#onCreate() 处创建并在最后一个销毁
活动#onDestroy()。”
嗯,视图模型也是如此,不是吗?
我非常确定视图模型可以在配置更改中幸存下来(如果首先将它们放在首位,这就是重点)
What is ActivityRetainedScoped
?它与 VM 范围有何不同?为什么谷歌喜欢将概念上应该简单的事情复杂化
https://developer.android.com/training/dependency-injection/hilt-android https://developer.android.com/training/dependency-injection/hilt-android
好吧,尽管 ActivityRetainedScope 和 ViewModelScope 是兄弟姐妹,人们可能认为这使它们相同,但事实上并非如此。
嗯,视图模型也是如此,不是吗?我非常确定视图模型可以在配置更改中幸存下来(如果首先将它们放在首位,这就是重点)
是的,但实际上不是。 Viewmodel 确实可以在配置更改后幸存下来,但仅限于其范围内的生命周期所有者。那么让我们考虑以下场景:
你有两个依赖项,一个是ActivtyRetainedScoped
另一个是viewmodelscoped
.
当您现在将 viewmodeldependency 注入 viewmodel 且 viewmodel 的生命周期所有者是一个活动时,那么您是对的,ActivtyRetainedScope 和 ViewmodelScope 都不会产生任何区别。
但现在让我们假设生命周期所有者是一个片段,在这种情况下,当您导航出片段时,viewmodelscoped 依赖项将“死亡”,并且 activtyretainedscope 依赖项将比 viewmodelscoped 依赖项寿命更长。
我希望我能解释它们之间的区别。当英语不是你的母语时,这些“范围”等有点困难。另外,如果这是正确答案,我也不是100%
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)