【问题标题】:Can function of DAO class be called in ViewModel class without Coroutine可以在没有协程的ViewModel类中调用DAO类的函数吗
【发布时间】:2019-08-25 07:35:14
【问题描述】:

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

private val nights = database.getAllNights()

你可以在这个link看到整个repo

【问题讨论】:

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


    【解决方案1】:

    Dao function getAllNights() 正在返回 LiveData

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

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

    相比之下,如果您进行其中一个调用,其中它包含在 launch 中并切换到 IO 调度程序,例如 getTonight()

    fun getTonight(): SleepNight?
    

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

    【讨论】:

      猜你喜欢
      • 2012-02-17
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多