Sobes.tech
Junior — Middle

Jakie mogą wystąpić konsekwencje przy bezpośrednim wywołaniu konstruktora ViewModel w celu utworzenia jej instancji?

sobes.tech AI

Odpowiedź od AI

Bezpośrednie wywołanie konstruktora ViewModel (np. przez new ViewModel()) w Android powoduje, że cykl życia ViewModel nie będzie zarządzany przez system. W rezultacie:

  • ViewModel nie będzie zachowany podczas obrotów ekranu lub ponownego tworzenia Activity/Fragment.
  • Traci się główną zaletę ViewModel — zachowanie stanu.
  • Mogą wystąpić wycieki pamięci, jeśli ViewModel zawiera odwołania do UI.

Poprawny sposób tworzenia ViewModel to użycie ViewModelProvider, który zapewnia właściwe zarządzanie cyklem życia:

val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)

Zapewnia to ponowne użycie jednej instancji ViewModel w ramach cyklu życia komponentu.