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.