Что такое Scope в Jetpack ViewModel

«Что такое Scope в Jetpack ViewModel» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Scope в ViewModel определяет его жизненный цикл. ViewModel остается в памяти, пока его Scope активен. Например, при использовании viewModelScope в ViewModel:

class MyViewModel : ViewModel() {
    fun fetchData() {
        viewModelScope.launch {
            // Работает, пока ViewModel жива
            val data = repository.loadData()
        }
    }
}

Основные Scope:

  1. Activity Scope – уничтожается при завершении Activity
  2. Fragment Scope – уничтожается при детаче Fragment
  3. Navigation Graph Scope – живет пока граф навигации активен

ViewModel переживает изменения конфигурации, но уничтожается, когда связанный с ним Scope (Activity/Fragment) завершается окончательно.