ViewModel – абстрактный класс, упрощающий реализацию паттерна MVVM в Android-приложении.

В общем случае ViewModel используется следующим образом:

1. Создается наследник класса ViewModel, который реализует VM-логику в MVVM компоненте.

2. Объект ViewModel инстанциируется во View-слое (активити или фрагменте) с помощью delegated property viewModels():

val viewModel: MyViewModel by viewModels()

3. Активити или фрагмент использует объект viewModel для получения обновлений UI.

Объект, созданный с помощью by viewModels() переживает пересоздание активити и фрагмента при изменении конфигурации (например при повороте экрана).

Объект ViewModel уничтожается только в случае, если соответсвующий View-класс не пересоздается. Для активити это происходит, когда вызывается onDestroy() после вызова метода finish(). В случае фрагмента – после вызова onDetach().

При уничтожении объекта ViewModel вызывается метод onCleared().