Основы корутин и области видимости
Запускайте корутины в правильной области видимости
«Основы корутин и области видимости» — бесплатный урок Android Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 4 уроков всего.
Что такое сопрограммы
Сопрограммы позволяют писать асинхронный неблокирующий код в последовательном стиле. В Kotlin это решение для задач вроде сетевого ввода-вывода и работы с базой данных, пришедшее на смену обратным вызовам и потокам.
Функции suspend
Функция, помеченная как suspend, может приостановиться, не блокируя поток, и продолжить работу позже. Вызывать её можно только из сопрограммы или другой suspend-функции.
suspend fun fetchUser(): User {
delay(1000) // non-blocking pause
return User(1, "Ada", "ada@x.com")
}Приостановка и блокировка
delay приостанавливает сопрограмму, но освобождает поток для другой работы. Thread.sleep блокирует весь поток. Сопрограммы используют приостановку, чтобы сохранять эффективность.
Запуск сопрограммы
Запустите сопрограмму с помощью launch в CoroutineScope. Она выполняется параллельно и не возвращает результат.
scope.launch {
val user = fetchUser()
println(user.name)
}Получение результата с помощью async
Используйте async, когда нужно получить значение. Он возвращает объект Deferred, для которого вызывается await.
val deferred = scope.async { fetchUser() }
val user = deferred.await()Что такое CoroutineScope
Область определяет время жизни запущенных в ней сопрограмм. При отмене области отменяются все её сопрограммы. Это и есть структурированная конкурентность.
Структурированная конкурентность
Поскольку сопрограммы существуют внутри области, они случайно не могут пережить её. Это предотвращает утечки: когда экран закрывается, его область отменяется, и выполняемая работа прекращается.
Отмена
При отмене области или задания в следующей точке приостановки возникает CancellationException, что корректно останавливает сопрограмму.
val job = scope.launch { /* work */ }
job.cancel() // stops it cooperativelyКооперативная отмена
Сопрограммы должны сотрудничать: длительные циклы, нагружающие CPU, должны проверять isActive или вызывать suspend-функцию, чтобы отмена могла вступить в силу.
while (isActive) {
// do a chunk of work
}Исключения в сопрограммах
Необработанное исключение в launch передаётся области и отменяет соседние сопрограммы (если не используется SupervisorJob). Обрабатывайте ошибки с помощью try/catch или CoroutineExceptionHandler.
Зачем нужны области в Android
Android предоставляет готовые области, связанные с жизненными циклами компонентов, — например, viewModelScope и lifecycleScope, — поэтому ваши сопрограммы автоматически отменяются в нужный момент. Об этом будет следующий урок.
Быстрая проверка
Проверьте своё понимание областей сопрограмм.
Повторение
Вы научились:
- Функции
suspendприостанавливаются, не блокируя поток. launchзапускает работу без ожидания результата;asyncвозвращает результат.- CoroutineScope ограничивает время жизни сопрограмм (структурированная конкурентность).
- Отмена выполняется кооперативно.
Часто задаваемые вопросы
Урок «Основы корутин и области видимости» бесплатный?
Да — полный текст урока «Основы корутин и области видимости» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 4 уроков всего.
Чему я научусь в уроке «Основы корутин и области видимости»?
Запускайте корутины в правильной области видимости Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Android Academy?
Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Основы корутин и области видимости»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Android Academy?
Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы корутин и области видимости
- viewModelScope и диспетчеры
- Основы Kotlin Flow
- StateFlow и SharedFlow