web-dev-qa-db-fra.com

AndroidViewModel vs ViewModel

Avec l'introduction de la bibliothèque Android Architecture Components, plusieurs nouvelles classes ont été introduites, notamment AndroidViewModel et ViewModel. Cependant, j'ai du mal à comprendre la différence entre ces deux classes. La documentation décrit succinctement AndroidViewModel comme suit:

Prise en compte du contexte d'application ViewModel

J'apprécie la brièveté, mais qu'est-ce que cela implique exactement? Quand devrions-nous choisir d'utiliser AndroidViewModel sur ViewModel et vice-versa?

108
cascal

Si vous devez utiliser un contexte dans votre modèle de vue, vous devez utiliser AndroidViewModel, car il contient le contexte de l'application (pour récupérer l'appel de contexte getApplication ()), sinon utilisez ViewModel standard.

EDIT

AndroidViewModel a contexte d'application . Nous savons tous que le fait d'avoir une instance de contexte statique est mauvais! (Peut causer une fuite de mémoire!)

Mais, Avoir une instance d'application statique n'est pas si mal que vous ne le pensez

Parce qu'il n'y a qu'une seule instance d'application dans notre application en cours d'exécution.

Donc, utiliser & avoir une instance d'application dans une classe spécifique n'est pas un problème en général.

Mais si l'instance d'application les référence, c'est un problème en raison du problème de cycle de référence.

Voir aussi à propos de l'instance d'application

159
Alex