Ответ
Работал с различными скоупами в Kotlin: GlobalScope, lifecycleScope, viewModelScope, кастомные скоупы через CoroutineScope().
Основные моменты:
- Для UI-логики использую
lifecycleScope(в Activity/Fragment) иviewModelScope(в ViewModel) - Избегаю
GlobalScopeиз-за риска утечек памяти - Кастомные скоупы с
SupervisorJob()для независимых задач
Пример:
// ViewModel с viewModelScope
viewModelScope.launch {
val data = repository.fetchData()
_uiState.value = DataLoaded(data)
}
// Кастомный скоуп
val customScope = CoroutineScope(Dispatchers.IO + SupervisorJob())
customScope.launch {
// тяжелые операции
}
Всегда отменяю скоупы в onCleared()/onDestroy() для предотвращения утечек.