Trong Google I / O cuối cùng, Jose Alcerreca và Yigit Boyar nói với chúng tôi rằng chúng ta không còn nên sử dụng LiveData để lấy dữ liệu. Bây giờ chúng ta nên sử dụng các chức năng treo cho các lần tìm nạp một lần và sử dụng Flow của Kotlin để tạo luồng dữ liệu. Tôi đồng ý rằng coroutines rất tốt cho tìm nạp một lần hoặc các thao tác CRUD khác, chẳng hạn như chèn, v.v. Nhưng trong trường hợp tôi cần một luồng dữ liệu, tôi không hiểu những lợi thế mà Flow mang lại cho tôi. Dường như với tôi rằng LiveData cũng đang làm như vậy.
Ví dụ với Flow:
ViewModel
val items = repository.fetchItems().asLiveData()
Kho
fun fetchItems() = itemDao.getItems()
Đào
@Query("SELECT * FROM item")
fun getItems(): Flow<List<Item>>
Ví dụ với LiveData:
ViewModel
val items = repository.fetchItems()
Kho
fun fetchItems() = itemDao.getItems()
Đào
@Query("SELECT * FROM item")
fun getItems(): LiveData<List<Item>>
Tôi cũng muốn xem một số ví dụ về các dự án sử dụng coroutines và Flow để làm việc với Room hoặc Retrofit. Tôi chỉ tìm thấy một mẫu ToDo của Google trong đó coroutines được sử dụng để tìm nạp một lần và sau đó lấy lại dữ liệu theo cách thủ công khi thay đổi.