【发布时间】:2021-10-15 10:03:43
【问题描述】:
我们平时使用 Room 的时候,使用 Kotlin Coroutine 并做一个 DAO 来访问 Room 并得到结果。大多数函数通常在函数开头有suspend修饰符,但LiveData和Flow。
例如,让我们看一下下面的这两个代码。
@Query("SELECT * FROM MockTable")
suspend fun allMockDataWithSuspend(): List<MockData>
@Query("SELECT * FROM MockTable")
fun allMockData(): Flow<List<MockData>> // or LiveData<List<MockData>>
当我们使用suspend修饰符时,我们需要在协程范围内调用该函数,因为该函数具有suspend修饰符。但是当函数的结果是LiveData或Flow时,我们不需要在协程中调用函数,即使它是I/O访问。
这怎么可能?
【问题讨论】:
标签: android android-room kotlin-coroutines android-livedata kotlin-flow