Статьи, курсы и практика по асинхронному программированию на 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.