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