#flow #jetpack
Пару дней назад Google выпустили обновление для API
Flow, где заметно улучшили его взаимодействие с UI-слоем. Если говорить о текущем состоянии, то, в целом, мы уже можем использовать
Flow и отказаться от LiveData. Правда, есть одно замечание: может быть не безопасно подписываться в UI-слое на холодный Flow, если мы вручную не можем отменить задачу, которая им выполняется. В качестве примера в статье приводится обновление локации пользователя и возможное текущее решение.Теперь у нас есть три новых метода:
🔸 LifecycleOwner.addRepeatingJob — принимает
Lifecycle.State в качестве параметра и используется для автоматического создания и старта новой корутины и отменяет её, когда состояние достигнет противоположного значения.🔸Lifecycle.repeatOnLifecycle — аналогичная функция, но только для
Lifecycle. 🔸Flow.flowWithLifecycle — этот API использует предыдущую функцию под капотом и также закрывает «продьюсера» в момент противоположного состояния жизненного цикла. Кроме этого, данную фукнцию можно встроить напрямую в целочку вызова
Flow, что делает вызов более лаконичным. Важно помнить, что эта функция работает по аналогии с Flow.flowOn, которая затрагивает только цепочку, которая выше неё и добавляет буфер для предотвращения backpressure.В целом, в статье упоминается то, что теперь можно полностью эмитировать поведение
LiveData и использовать Flow в приложениях, где вы хотите использовать только Kotlin API. Это здорово, но пока API находится в alpha-версии и стоит тащить его к себе аккуратно.Кроме этого, если вам это нужно, добавили поддержку data binding для
Flow. Детали тут.