Корутины и Flow в Kotlin для Android-разработчиков

Статьи, курсы и практика по асинхронному программированию на Kotlin. От первой корутины до реактивной архитектуры с Room, Retrofit и Jetpack Compose.

Новые статьи

  • Room + Flow: когда база данных сама обновляет интерфейс
    Классический подход к работе с базой данных в Android выглядит так: отправил запрос, получил результат, обновил UI. Понадобились свежие данные — отправил ещё один запрос. Добавил запись — снова запросил весь список. Удалил — запросил. Изменил — запросил. Схема «запрос-ответ» работает, но заставляет разработчика вручную синхронизировать данные с интерфейсом. Room предлагает другой подход. … Читать далее
  • NetworkResult: оборачиваем сетевой запрос в sealed-класс
    Любой сетевой запрос в приложении может закончиться тремя способами: данные загружаются, данные получены, что-то пошло не так. Эти три состояния — Loading, Success, Error — повторяются из экрана в экран, из проекта в проект. Каждый раз писать try/catch, вручную переключать флаги isLoading и isError — утомительно и чревато ошибками. Вместо этого можно упаковать … Читать далее
  • flatMapLatest и семейство *Latest: отменяй устаревшее, показывай актуальное
    В предыдущей статье мы научились фильтровать входной поток: убрали дребезг, дубликаты, пустые запросы. Но мы не затронули другую проблему: что происходит, если обработка одного значения занимает больше времени, чем интервал между двумя значениями? Представьте: пользователь ищет рецепты. Набрал «пирог» — приложение отправило запрос. Пока сервер думает, пользователь передумал и исправил на «пирожки». Приложение … Читать далее
  • debounce, distinctUntilChanged и filter: три оператора, без которых не обходится ни один поиск
    Представьте: пользователь открывает строку поиска и начинает набирать запрос. Каждый символ порождает новое значение в потоке: Если реагировать на каждый символ, приложение отправит шесть запросов к серверу за полторы секунды. Пять из них бессмысленны: пользователь ещё не закончил печатать. Сервер нагружен, батарея садится, а интерфейс дёргается, показывая промежуточные результаты, которые тут же устаревают. … Читать далее
  • stateIn() и shareIn(): как подогреть холодный Flow для UI
    Мы уже выяснили, что холодный Flow плохо дружит с Compose: при каждой рекомпозиции поток перезапускается с нуля. Решение — превратить его в горячий. Но как именно? В Kotlin есть два оператора-подогревателя: stateIn() и shareIn(). Первый превращает холодный Flow в StateFlow, второй — в SharedFlow. Оба живут в скоупе, который вы им укажете, и … Читать далее

Мок-интервью для Android-разработчиков

На канале Overqualified разбираем вопросы с собеседований по корутинам и Flow в Kotlin.