所有对数据库的查询都用CouroutineScope编写。但是这行代码仅在ViewModel类内部。而且它不会阻止UI线程。我不明白它的执行方式
private val nights = database.getAllNights()
您可以在此link
中看到整个仓库答案 0 :(得分:0)
Dao function getAllNights()
返回一个LiveData:
fun getAllNights(): LiveData<List<SleepNight>>
此返回在调用该函数后立即完成,而无需等待从数据库加载结果。然后可以观察到LiveData在加载数据时(在后台线程上,异步地)得到通知。如果查询结果以后发生更改,它还将通知观察者。
相反,如果您将其中一个呼叫包裹在launch
内并切换到IO
调度程序,例如getTonight()
:
fun getTonight(): SleepNight?
像这样的Dao函数将阻塞线程,直到获得查询结果为止,这就是为什么在调用它之前要先进入后台线程这一点很重要的原因。