Как ViewModel уничтожается

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

Ответ

ViewModel уничтожается автоматически, когда связанный с ней LifecycleOwner (Activity/Fragment) завершает свой жизненный цикл и уничтожается. Это происходит в следующих случаях:

  1. Activity/Fragment завершается (не из-за поворота экрана) – вызывается onCleared(), где можно освободить ресурсы.
  2. ViewModelStoreOwner (например, Activity) уничтожается без возможности восстановления.

Пример переопределения onCleared():

class MyViewModel : ViewModel() {
    private val disposable = CompositeDisposable()

    override fun onCleared() {
        disposable.clear() // Очистка ресурсов
        super.onCleared()
    }
}

Важно: ViewModel сохраняется при смене конфигурации (например, повороте экрана), так как она хранится в ViewModelStore и перепривязывается к новому экземпляру Activity/Fragment.