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

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

Новые статьи

  • Suspend function should be called only from a coroutine: что это значит
    Вы написали suspend fun, вызвали её из обычного кода — и проект не собирается. Студия подчёркивает вызов красным и пишет: В проектах на старой версии компилятора формулировка другая, но смысл тот же: Это не поломка окружения и не отсутствующая зависимость. Компилятор говорит ровно то, что написано: suspend-функцию нельзя вызвать откуда попало. Почему так … Читать далее
  • launch, async и runBlocking: что когда выбирать
    Два запроса к серверу, каждый по секунде. Экран грузится две секунды. Вы точно помните, что корутины нужны как раз для того, чтобы так не было: Корутина здесь ни при чём: вы написали последовательный код. Он не блокирует главный поток — и на этом его заслуги заканчиваются. Чтобы запросы пошли одновременно, нужен другой билдер. … Читать далее
  • Корутина не отменяется: разбираем кооперативную отмену
    Вы вызвали job.cancel(), а корутина продолжает работать. Логи идут, счётчик крутится, экран давно закрыт. Отмена в корутинах устроена не так, как многие ожидают, и ломается двумя очень типовыми способами. Отмена — это просьба, а не приказ cancel() не убивает корутину. Он ставит флаг: «тебя попросили остановиться». Дальше корутина должна этот флаг заметить — … Читать далее
  • try/catch вокруг launch не ловит исключение. И это не баг
    Код, который пишут примерно все и примерно один раз: Запрос падает, приложение показывает что угодно, кроме ошибки, а в логах — необработанное исключение. Выглядит как поломка библиотеки. На самом деле всё работает ровно так, как задумано, просто интуиция из синхронного кода здесь не применима. Почему не ловит launch — не вызов работы, а … Читать далее
  • CoroutineScope и coroutineScope: в чём разница
    Представьте: вы пишете функцию, которая должна загрузить профиль и ленту параллельно, а потом вернуть собранный экран. Пишете так: Работает. Потом вы меняете одну букву — заглавную C на строчную: Тоже работает. Выглядят почти одинаково, называются почти одинаково — и делают принципиально разное. Первый вариант в проекте оставлять нельзя, второй можно. Что такое скоуп … Читать далее

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

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