DAO class 的函数可以在没有协程的 ViewModel class 中调用吗
Can function of DAO class be called in ViewModel class without Coroutine
所有对数据库的查询都写在CouroutineScope中。但是这行代码就在 ViewModel class 里面。而且它不会阻塞 UI 线程。我不明白它是如何执行的
private val nights = database.getAllNights()
你可以在这个 link
中看到整个 repo
Dao function getAllNights()
is returning a LiveData:
fun getAllNights(): LiveData<List<SleepNight>>
此 return 在调用该函数后立即完成,无需等待结果从数据库加载。然后可以观察到 LiveData 在加载数据时收到通知(在后台线程上,异步)。如果稍后查询结果发生变化,它也会通知观察者。
相比之下,如果您将其中一个调用包装在 launch
中并切换到 IO
调度程序,例如 getTonight()
:
fun getTonight(): SleepNight?
像这样的 Dao 函数将阻塞线程,直到它获得查询结果,这就是为什么在调用它之前注意进入后台线程很重要。
所有对数据库的查询都写在CouroutineScope中。但是这行代码就在 ViewModel class 里面。而且它不会阻塞 UI 线程。我不明白它是如何执行的
private val nights = database.getAllNights()
你可以在这个 link
中看到整个 repoDao function getAllNights()
is returning a LiveData:
fun getAllNights(): LiveData<List<SleepNight>>
此 return 在调用该函数后立即完成,无需等待结果从数据库加载。然后可以观察到 LiveData 在加载数据时收到通知(在后台线程上,异步)。如果稍后查询结果发生变化,它也会通知观察者。
相比之下,如果您将其中一个调用包装在 launch
中并切换到 IO
调度程序,例如 getTonight()
:
fun getTonight(): SleepNight?
像这样的 Dao 函数将阻塞线程,直到它获得查询结果,这就是为什么在调用它之前注意进入后台线程很重要。