在我的 View 模型中,我有两个属性:
private val databaseDao = QuestionDatabase.getDatabase(context).questionDao()
val allQuestions: LiveData<List<Question>> = databaseDao.getAllQuestions()
我在片段中设置了“allQuestions”观察者,并且我注意到当我旋转设备时观察者被调用。即使 View 模型只被创建一次(可以通过 init() 中的日志语句得知),观察者方法仍然被调用。
这是为什么呢?我认为重点是 View 模型的持久性。理想情况下,我希望数据库问题仅加载一次,无论轮换如何。
最佳答案
发生这种情况是因为 LiveData
具有生命周期感知能力。
当您旋转屏幕时,您的 UI Controller [Activity/Fragment] 会经历各种生命周期状态和生命周期回调。
由于 LiveData
具有生命周期感知能力,因此它会相应地更新详细信息。
我尝试用以下几点来解释这一点:
- 当 UI Controller 位于屏幕外时,
实时数据
不执行更新。 - 当 UI Controller 返回屏幕时,它会获取当前数据。
(由于此属性,您将获得上述行为) - 当 UI Controller 被销毁时,它会自行执行清理操作。
- 当新 UI Controller 开始观察实时数据时,它会获取当前数据。
关于android-livedata - ViewModel Livedata 观察者调用轮换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66648890/