【发布时间】:2021-04-20 08:41:07
【问题描述】:
ViewModel documentation 引用:
注意:ViewModel 绝不能引用视图、生命周期或任何可能持有对活动上下文的引用的类。
LiveData 文档接下来说明:
只要给定的 LifecycleOwner 未被销毁,LiveData 就会对观察者和所有者保持强引用。当它被销毁时,LiveData 会删除对观察者和所有者的引用。
所以,如果我们在 ViewModel 中定义了一个 LiveData 变量,并且我们设置为使用片段(或活动)作为 所有者 和/或 observer,这是否意味着我们违反了 ViewModel 文档中所述的规则?设置此类所有者/观察者的操作是否间接在 ViewModel 中放置一个 Activity 上下文reference?
LiveData 文档似乎不应该担心,因为它会在需要时删除引用,但我想知道我是否遗漏了什么,因为文档似乎自相矛盾。
【问题讨论】:
-
ViewModel 和 LiveData 有不同的工作机制。 LifeCycleOwner 对象不是 View 对象,因此 lLİveData 不引用 View 对象。所以 ViewModel 类中的 LiveData 对象没有问题。另一方面,您不得在 ViewModel 类中保留对任何类型 View 对象的引用,例如 TextView mTextView; setTextView(TextView textView) { mTextView = texView; }。这正是 ViewModel 文档的含义。
标签: android android-livedata android-viewmodel