В чем разница между ViewModel, которая расширяет BaseObservable и Android ViewModel Class?

В настоящее время я изучаю архитектурный образец MVVM, но я запутался между классом Custom ViewModel, который расширяет BaseObservable и другой ViewModel, который предоставляется самим Android.

Ответ 1

Ваш пользовательский ViewModel - это просто держатель данных для вашего представления, и поскольку он связан с вашим представлением (и потому что это объект Observable), он может уведомить представление об изменениях данных. Однако он не знает об изменениях конфигурации, таких как изменение ориентации (поворот вида), поэтому в таких случаях программист должен сохранить и восстановить пример данных здесь.

С другой стороны, ViewModel, предоставляемый Android, знает об этих изменениях конфигурации и, следовательно, его данные согласованы на протяжении жизненного цикла активности. ViewModel будет уничтожена при разрушении действия.

Ответ 2

Основное различие между суперклассом ViewModel() и суперклассом AndroidViewModel() заключается в том, что AndroidViewModel() имеет ссылку на контекст приложения (а не на сам контекст действия).

Действия должны быть уничтожены и воссозданы при изменении конфигурации (например, поворот телефона). поэтому плохая идея передавать контекст в ViewModel, поскольку он имеет тенденцию к утечкам памяти (ссылка на уничтоженные действия).

ViewModel предназначен для того, чтобы выдержать эти изменения конфигурации, но ViewModel() не имеет никакой ссылки на Context.

AndroidViewModel(), с другой стороны, имеет ссылку на приложение (особый тип контекста), поэтому вы можете получить доступ к специфической информации приложения, такой как packageManager.

class BaseViewModel(application: Application) : AndroidViewModel(application)

Ответ 3

Вы можете прочитать документацию здесь: https://developer.android.com/topic/libraries/architecture/viewmodel

Я думаю, что основным преимуществом является использование ViewModelProvider для связывания вашего ViewModel с фрагментом или активностью, а затем вы получите тот же экземпляр с вашими данными, сохраняемыми в конфигурационных изменениях