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

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

Новые статьи

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

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

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