0Pricing
Android Academy · Lektion

Warum ein ViewModel verwenden?

Überstehen Sie Konfigurationsänderungen sauber.

Warum ein ViewModel verwenden? ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Android Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist ein ViewModel?

Ein ViewModel ist eine Android-Architekturkomponente, die dafür entwickelt wurde, UI-bezogene Daten zu speichern und zu verwalten und dabei den Lebenszyklus zu berücksichtigen.

Es überlebt Konfigurationsänderungen wie Bildschirmdrehungen. Ihre Daten werden daher nicht jedes Mal zerstört und neu erstellt, wenn das System die UI neu aufbaut.

Das Problem mit Konfigurationsänderungen

Wenn Sie das Gerät drehen, zerstört Android die Activity und erstellt sie neu. Jeder Zustand, der in der Activity oder im Composable gespeichert ist, geht verloren.

  • Ein Zähler wird auf null zurückgesetzt.
  • Eine geladene Liste verschwindet.
  • Eine Netzwerkanfrage wird möglicherweise neu gestartet.

Ein ViewModel löst dieses Problem, indem es außerhalb des Lebenszyklus der Activity-Instanz lebt.

Wie ein ViewModel bestehen bleibt

Das Framework hält dieselbe ViewModel-Instanz über Neuerstellungen hinweg am Leben. Wenn die neue Activity erstellt wird, erhält sie das vorhandene ViewModel statt einer neuen Instanz.

class CounterViewModel : ViewModel() {
    var count = 0
        private set

    fun increment() {
        count++
    }
}

Ein ViewModel in Compose beziehen

In Jetpack Compose rufen Sie ein ViewModel normalerweise mit der Hilfsfunktion viewModel() ab. Sie gibt für den Besitzer des Lebenszyklus dieselbe Instanz zurück.

import androidx.lifecycle.viewmodel.compose.viewModel

@Composable
fun CounterScreen(
    vm: CounterViewModel = viewModel()
) {
    Text("Count: " + vm.count)
}

Trennung von Zuständigkeiten

Ein ViewModel unterstützt eine klare Aufteilung:

  • UI-Schicht (Composables/Activities) rendert nur den Zustand und leitet Ereignisse weiter.
  • ViewModel enthält Zustand und Geschäftslogik.

Dadurch wird die UI schlanker und die Logik lässt sich leichter testen.

Gültigkeitsbereich und Besitz eines ViewModels

Ein ViewModel ist an einen ViewModelStoreOwner gebunden, normalerweise an eine Activity, ein Fragment oder einen Navigations-Back-Stack-Eintrag.

Es wird automatisch gelöscht, wenn dieser Besitzer dauerhaft zerstört wird, beispielsweise wenn der Benutzer die Activity über die Zurück-Schaltfläche beendet.

Der onCleared-Callback

Wenn das ViewModel endgültig zerstört wird, ruft das Framework onCleared() auf. Verwenden Sie die Methode, um geöffnete Ressourcen freizugeben.

class MyViewModel : ViewModel() {
    override fun onCleared() {
        super.onCleared()
        // cancel jobs, close listeners
    }
}

Was nicht in ein ViewModel gehört

Speichern Sie niemals Referenzen auf Views, Activities oder einen an die UI gebundenen Context in einem ViewModel. Da das ViewModel länger als die Activity lebt, führt dies zu Speicherlecks.

Wenn Sie einen Application-Context benötigen, verwenden Sie stattdessen AndroidViewModel.

AndroidViewModel für den App-Kontext

Wenn Sie tatsächlich einen Context benötigen, erweitern Sie AndroidViewModel. Dadurch erhalten Sie sicher den langlebigen Application-Context.

class PrefsViewModel(
    app: Application
) : AndroidViewModel(app) {
    private val context = getApplication<Application>()
}

Konstruktorargumente übergeben

Um Abhängigkeiten wie ein Repository in ein ViewModel einzuschleusen, verwenden Sie eine ViewModelFactory oder ein DI-Framework wie Hilt. Hilt behandeln wir später in diesem Lernpfad.

class UserViewModel(
    private val repo: UserRepository
) : ViewModel() {
    // repo provided via a factory or Hilt
}

Warum ViewModels wichtig sind

ViewModels sind ein Grundpfeiler moderner Android-Architektur. Sie bieten:

  • Beständigkeit über Konfigurationsänderungen hinweg.
  • Eine klare Trennung zwischen UI und Logik.
  • Eine vorhersehbare, testbare Zustandsverwaltung.

Kurze Überprüfung

Testen Sie Ihr Verständnis dafür, warum ViewModels verwendet werden.

Zusammenfassung

Sie haben gelernt:

  • Ein ViewModel speichert den UI-Zustand und überlebt Konfigurationsänderungen.
  • Es darf niemals Referenzen auf Views oder Activities enthalten, um Speicherlecks zu vermeiden.
  • Es ist an einen Besitzer gebunden und wird über onCleared() gelöscht.
  • AndroidViewModel stellt einen sicheren Application-Context bereit.

Häufig gestellte Fragen

Ist die Lektion „Warum ein ViewModel verwenden?“ kostenlos?

Ja — der vollständige Text von „Warum ein ViewModel verwenden?“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Android Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Warum ein ViewModel verwenden?“?

Überstehen Sie Konfigurationsänderungen sauber. Du übst Android Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Android Academy zu starten?

Keine Vorkenntnisse erforderlich. Android Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Warum ein ViewModel verwenden?“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Android Academy-Lektion Code schreiben und ausführen?

Ja. Jede Android Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Warum ein ViewModel verwenden?
  2. Zustand aus dem ViewModel bereitstellen
  3. Der Android-Lifecycle
  4. collectAsStateWithLifecycle
← Zurück zu Android Academy