Sobes.tech
Junior — Middle

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.