【发布时间】:2020-03-12 09:05:43
【问题描述】:
在上一次 Google I/O 中,Jose Alcerreca 和 Yigit Boyar told us 认为我们不应再使用 LiveData 来获取数据。现在我们应该使用暂停函数进行一次性获取,并使用 Kotlin 的 Flow 创建数据流。我同意协程非常适合一次性获取或其他 CRUD 操作,例如插入等。但是在我需要数据流的情况下,我不明白 Flow 给了我什么优势。在我看来,LiveData 也在做同样的事情。
流程示例:
视图模型
val items = repository.fetchItems().asLiveData()
存储库
fun fetchItems() = itemDao.getItems()
道
@Query("SELECT * FROM item")
fun getItems(): Flow<List<Item>>
LiveData 示例:
视图模型
val items = repository.fetchItems()
存储库
fun fetchItems() = itemDao.getItems()
道
@Query("SELECT * FROM item")
fun getItems(): LiveData<List<Item>>
我还希望看到一些使用协程和 Flow 与 Room 或 Retrofit 配合使用的项目示例。我发现只有一个谷歌的ToDo sample,其中协程用于一次性获取,然后在更改时手动重新获取数据。
【问题讨论】:
标签: android kotlin android-livedata kotlin-coroutines kotlinx.coroutines.flow