J'étudie actuellement le modèle architectural MVVM mais je me suis confondu entre la classe Custom ViewModel qui étend BaseObservable et un autre ViewModel qui est fourni par Android lui-même.
Votre ViewModel personnalisé est simplement un support de données pour votre vue et parce qu'il est lié à votre vue (et parce qu'il s'agit d'un objet observable), il peut notifier la vue des changements dans les données. Cependant, il n'est pas au courant des changements de configuration tels que le changement d'orientation (rotation de la vue), par conséquent, dans de tels cas, le programmeur doit enregistrer et restaurer les données exemple ici .
D'autre part, le ViewModel fourni par Android est conscient de ces changements de configuration et donc ses données sont cohérentes tout au long du cycle de vie de l'activité. Le ViewModel sera détruit lorsque l'activité se détruit.
La principale différence entre la superclasse ViewModel () et la superclasse AndroidViewModel () est que AndroidViewModel () a une référence au contexte de l'application (et non au contexte d'activité lui-même).
Les activités sont censées être détruites et recréées lorsque la configuration change (comme la rotation du téléphone). c'est donc une mauvaise idée de passer un contexte au ViewModel, car il tend à des fuites de mémoire (référence aux activités détruites).
Le ViewModel est destiné à survivre à ces modifications de configuration, mais le ViewModel () n'a aucune référence au contexte.
androidViewModel () d'autre part a une référence de l'application (un type spécial de contexte) afin que vous puissiez accéder à des informations spécifiques à l'application comme packageManager.
class MyViewModel(application: Application) : AndroidViewModel(application)