Jak Android realizuje mechanizm zachowania stanu ViewModel podczas zmian konfiguracji lub w cyklu życia?
sobes.tech AI
Odpowiedź od AI
W Androidzie, ViewModel służy do przechowywania i zarządzania danymi interfejsu użytkownika z uwzględnieniem cyklu życia. Przy zmianach konfiguracji (np. obrót ekranu), system niszczy Activity lub Fragment, ale ViewModel jest zachowywany i ponownie przypisywany nowym instancjom.
Osiąga się to za pomocą ViewModelProvider, który wiąże ViewModel z cyklem życia komponentu. ViewModel jest przechowywany w pamięci, dopóki jest powiązany z cyklem życia właściciela (Activity/Fragment). Gdy komponent jest niszczony z powodu zmiany konfiguracji, ViewModel nie jest niszczony, lecz jest ponownie wykorzystywany w nowej instancji.
Aby zapisać stan wewnątrz ViewModel, można użyć SavedStateHandle, specjalnego obiektu, który pozwala na zapisywanie i przywracanie danych w przypadku zniszczenia procesu lub innych sytuacji wykraczających poza zwykłą zmianę konfiguracji.
Przykład użycia SavedStateHandle:
class MyViewModel(private val state: SavedStateHandle) : ViewModel() {
var counter: Int
get() = state.get<Int>("counter") ?: 0
set(value) = state.set("counter", value)
}
W ten sposób ViewModel przechowuje dane w pamięci podczas zmian konfiguracji, a SavedStateHandle pomaga zachować stan w poważniejszych zdarzeniach, takich jak zniszczenie procesu.