Какие знаешь виды скоупов в корутинах

«Какие знаешь виды скоупов в корутинах» — вопрос из категории Coroutines и Flow, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В корутинах есть несколько видов скоупов:

  1. GlobalScope – живет пока живет приложение, не привязан к жизненному циклу компонентов.
    GlobalScope.launch { /* работа в фоне */ }
  1. CoroutineScope – кастомный скоуп с явным Job или диспетчером.
    val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
  1. Жизненные скоупы (LifecycleScope, ViewModelScope) – привязаны к жизненному циклу компонентов (Activity, ViewModel и т.д.). Автоматически отменяются при уничтожении.
    lifecycleScope.launch { /* работа с жизненным циклом */ }
  1. SupervisorScope – дочерние корутины не отменяют родителя при ошибке.

  2. withContext – временный скоуп для смены контекста (например, переключения потока).

Важно: GlobalScope лучше избегать из-за риска утечек памяти.