调用轮换的 ViewModel Live Data 观察者

ViewModel Live Data observers calling on rotation

在我的视图模型中,我有两个属性:

private val databaseDao = QuestionDatabase.getDatabase(context).questionDao()
val allQuestions: LiveData<List<Question>> = databaseDao.getAllQuestions()

我在片段中的“allQuestions”上设置了观察器,我注意到当我旋转设备时正在调用观察器。即使视图模型只被创建一次(可以通过 init() 中的日志语句得知),观察者方法仍在被调用。

这是为什么?我认为重点是在视图模型中具有持久性。理想情况下,我希望数据库问题只加载一次,而不考虑轮换。

发生这种情况是因为 LiveData 具有生命周期意识。
当您旋转屏幕时,您 UI 控制器 [Activity/Fragment] 会经历各种生命周期状态和生命周期回调。
由于 LiveData 具有生命周期感知能力,因此它会相应地更新详细信息。

我试图用以下几点来解释这一点:

  1. 当 UI 控制器不在屏幕上时,Live Data 不执行任何更新。
  2. 当 UI 控制器返回屏幕时,它会获取当前数据。
    (因为这个 属性 你会出现以上行为)
  3. 当 UI 控制器被销毁时,它会自行执行清理。
  4. new UI控制器开始观察实时数据时,它获取当前数据。