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?
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.
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.