В прошлых операциях ввода-вывода Google Хосе Альсеррека и Йигит Бояр сказали нам, что мы больше не должны использовать LiveData для получения данных. Теперь мы должны использовать функции приостановки для однократных выборок и использовать поток Котлина для создания потока данных. Я согласен, что сопрограммы отлично подходят для выборочной загрузки или других операций CRUD, таких как вставка и т. Д. Но в тех случаях, когда мне нужен поток данных, я не понимаю, какие преимущества дает мне Flow. Мне кажется, что LiveData делает то же самое.
Пример с потоком:
ViewModel
val items = repository.fetchItems().asLiveData()
вместилище
fun fetchItems() = itemDao.getItems()
Dao
@Query("SELECT * FROM item")
fun getItems(): Flow<List<Item>>
Пример с LiveData:
ViewModel
val items = repository.fetchItems()
вместилище
fun fetchItems() = itemDao.getItems()
Dao
@Query("SELECT * FROM item")
fun getItems(): LiveData<List<Item>>
Я также хотел бы увидеть некоторые примеры проектов, использующих сопрограммы и Flow для работы с Room или Retrofit. Я нашел только образец задачи Google, в котором сопрограммы используются для выборочной выборки, а затем вручную обновляются данные при изменении.
источник