Как уничтожить ViewModel при навигации назад

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

Ответ

В Android ViewModel уничтожается автоматически, когда связанный с ней ViewModelStoreOwner (Activity/Fragment) завершает свой жизненный цикл. Однако есть нюансы:

  1. Activity: ViewModel уничтожается при onDestroy(), если isFinishing == true (нажатие назад или finish())
  2. Fragment: ViewModel уничтожается при onDestroy(), если фрагмент удаляется из back stack

Для принудительной очистки:

// Для Activity
if (!isChangingConfigurations) { // Не очищаем при повороте
    viewModelStore.clear()
}

// Для Fragment
parentFragmentManager.beginTransaction()
    .remove(this)
    .commit()

Важно: Не очищайте ViewModel вручную без необходимости - это нарушает принцип сохранения состояния при повороте экрана.