Sobes.tech
Junior — Middle

Wie implementiert Android den Mechanismus zur Speicherung des ViewModel-Zustands bei Konfigurationsänderungen oder im Lebenszyklus?

sobes.tech KI

Antwort von AI

In Android ist das ViewModel dafür vorgesehen, UI-Daten unter Berücksichtigung des Lebenszyklus zu speichern und zu verwalten. Bei Konfigurationsänderungen (z.B. Bildschirmrotation) zerstört das System die Activity oder das Fragment, aber das ViewModel bleibt erhalten und wird den neuen Instanzen erneut zugewiesen.

Dies wird durch den ViewModelProvider erreicht, der das ViewModel an den Lebenszyklus des Komponenten bindet. Das ViewModel bleibt im Speicher, solange es mit dem Lebenszyklus des Besitzers (Activity/Fragment) verbunden ist. Wenn eine Komponente aufgrund einer Konfigurationsänderung zerstört wird, wird das ViewModel nicht zerstört, sondern in einer neuen Instanz wiederverwendet.

Um den Zustand innerhalb des ViewModel zu speichern, kann man SavedStateHandle verwenden, ein spezielles Objekt, das das Speichern und Wiederherstellen von Daten im Falle der Zerstörung des Prozesses oder anderer Situationen ermöglicht, die über eine einfache Konfigurationsänderung hinausgehen.

Beispiel für die Verwendung von SavedStateHandle:

class MyViewModel(private val state: SavedStateHandle) : ViewModel() {
    var counter: Int
        get() = state.get<Int>("counter") ?: 0
        set(value) = state.set("counter", value)
}

Auf diese Weise speichert das ViewModel Daten im Speicher bei Konfigurationsänderungen, und SavedStateHandle hilft, den Zustand bei schwerwiegenderen Ereignissen wie der Zerstörung des Prozesses zu bewahren.