В чем разница между ViewModel, расширяющей BaseObservable, и Android ViewModel Class? - PullRequest
0 голосов
/ 10 мая 2018

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

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

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

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

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

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

class MyViewModel(application: Application) : AndroidViewModel(application)
0 голосов
/ 29 сентября 2018

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

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

...