Android 对复合对象的LiveData的更改
我想确保我正确理解何时调用Android 对复合对象的LiveData的更改,android,android-livedata,Android,Android Livedata,我想确保我正确理解何时调用LiveData的Observer的onChanged方法 假设我们有一个对象A,它有一些基本类型 (一些整数、一些字符串等)和对象B作为字段 我知道调用setValue时会调用onChanged。我很确定,当A的基本字段更改时,或者当我将对象字段重新分配给一个新实例时,它也会被调用,而当我更改B的任何字段时,它都不会被调用 如果我错了,请纠正我。 这些规则是否也适用于从文件室获取的LiveData对象? 是否存在调用onChanged的其他情况?事实上,只有在使用se
LiveData
的Observer
的onChanged
方法
假设我们有一个对象A
,它有一些基本类型
(一些整数、一些字符串等)和对象B
作为字段
我知道调用setValue
时会调用onChanged
。我很确定,当A
的基本字段更改时,或者当我将对象字段重新分配给一个新实例时,它也会被调用,而当我更改B
的任何字段时,它都不会被调用
如果我错了,请纠正我。
这些规则是否也适用于从文件室获取的LiveData
对象?
是否存在调用
onChanged
的其他情况?事实上,只有在使用setValue()
或postValue()
方法设置LiveData
的包含值时,才调用LiveData
的onChanged
方法。没有任何机制可以观察由LiveData
持有的对象内部的字段。因此,通过更改object-a
中字段的值,不应通知观察者
另一方面,正如您所知,Room提供的查询db的方法能够返回LiveData
,而不是SomeType
。在引擎盖下,房间在查询的表上创建并注册一个,以了解其中的更改。因此,每次数据发生更改时,Room都会使用前面提到的ContentObserver
得到通知,然后再次获取查询结果并将其发布到LiveData
上