DAO 类的函数是否可以在没有协程的情况下在 ViewModel 类中调用



所有对数据库的查询都是用CouroutineScope编写的。但是这行代码就在 ViewModel 类内部。而且它不会阻塞 UI 线程。我不明白它是如何执行的

private val nights = database.getAllNights()

您可以在此链接中看到整个存储库

Dao 函数getAllNights()返回一个 LiveData:

fun getAllNights(): LiveData<List<SleepNight>>

此返回在调用该函数后立即完成,无需等待从数据库加载结果。然后,可以观察 LiveData 在加载数据时收到通知(在后台线程上异步)。如果查询结果稍后更改,它还将通知观察者。

相反,如果您接听其中一个电话,其中它被包装在launch中,并切换到IO调度程序,例如getTonight()

fun getTonight(): SleepNight?

像这样的 Dao 函数会阻塞线程,直到它获得查询结果,这就是为什么在调用它之前注意进入后台线程很重要的原因。

相关内容

最新更新