可以在没有协程的ViewModel类中调用DAO类的功能

时间:2019-08-25 07:35:14

标签: kotlin android-room android-architecture-components kotlin-coroutines

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

private val nights = database.getAllNights()

您可以在此link

中看到整个仓库

1 个答案:

答案 0 :(得分:0)

Dao function getAllNights()返回一个LiveData

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

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

相反,如果您将其中一个呼叫包裹在launch内并切换到IO调度程序,例如getTonight()

fun getTonight(): SleepNight?

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

相关问题