In der letzten Google-E / A haben Jose Alcerreca und Yigit Boyar uns mitgeteilt, dass wir LiveData nicht mehr zum Abrufen von Daten verwenden sollten. Jetzt sollten wir Suspend-Funktionen für One-Shot-Abrufe verwenden und Kotlins Flow verwenden, um einen Datenstrom zu erstellen. Ich bin damit einverstanden, dass Coroutinen sich hervorragend zum One-Shot-Abrufen oder für andere CRUD-Vorgänge wie das Einfügen usw. eignen. In Fällen, in denen ich einen Datenstrom benötige, verstehe ich jedoch nicht, welche Vorteile Flow mir bietet. Es scheint mir, dass LiveData dasselbe tut.
Beispiel mit Flow:
ViewModel
val items = repository.fetchItems().asLiveData()
Repository
fun fetchItems() = itemDao.getItems()
Dao
@Query("SELECT * FROM item")
fun getItems(): Flow<List<Item>>
Beispiel mit LiveData:
ViewModel
val items = repository.fetchItems()
Repository
fun fetchItems() = itemDao.getItems()
Dao
@Query("SELECT * FROM item")
fun getItems(): LiveData<List<Item>>
Ich würde auch gerne einige Beispiele für Projekte sehen, bei denen Coroutinen und Flow für die Arbeit mit dem Raum oder der Nachrüstung verwendet werden. Ich habe nur ein ToDo-Beispiel von Google gefunden, in dem Coroutinen zum einmaligen Abrufen und anschließenden manuellen erneuten Abrufen von Daten beim Ändern verwendet werden.