Почему нельзя обойтись одним видом CoroutineScope

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

Ответ

В Android рекомендуется использовать разные CoroutineScope для разных жизненных циклов компонентов (Activity, ViewModel и т.д.), чтобы избежать утечек памяти и корректно управлять отменой корутин.

  • Activity/Fragment Scope: lifecycleScope автоматически отменяет корутины при уничтожении компонента.
  • ViewModel Scope: viewModelScope отменяет корутины при очистке ViewModel.
  • Global Scope: GlobalScope живет всё время работы приложения и может привести к утечкам, если не управлять им вручную.

Пример с viewModelScope:

class MyViewModel : ViewModel() {
    fun fetchData() {
        viewModelScope.launch {
            // Работа с данными
        }
    }
}

Использование разных скоупов делает код безопасным и предсказуемым.