0Pricing
Android Academy · Lektion

DataStore oder SharedPreferences

Erfahren Sie, warum DataStore die moderne Wahl ist.

DataStore oder SharedPreferences 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.

Kleine Einstellungen speichern

Fast jede App muss kleine Datenmengen speichern: einen Schalter für den Dunkelmodus, den zuletzt verwendeten Tab oder einen Benutzernamen. Dabei handelt es sich um Schlüssel-Wert-Einstellungen, nicht um große relationale Datenmengen.

Jahrelang verwendete Android dafür SharedPreferences. Heute ist DataStore die empfohlene Lösung.

Was SharedPreferences ist

SharedPreferences ist ein einfacher, XML-basierter Schlüssel-Wert-Speicher. Sie erhalten einen Editor, setzen Werte und bestätigen sie.

  • Einfach zu verwenden
  • Im Framework integriert
  • Synchrone API, die den UI-Thread blockieren kann
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
prefs.edit().putBoolean("dark_mode", true).apply()
val dark = prefs.getBoolean("dark_mode", false)

Die Probleme mit SharedPreferences

SharedPreferences hat einige deutliche Schwächen:

  • getX()-Lesevorgänge können den aufrufenden Thread blockieren (oft den Hauptthread)
  • commit() führt Festplatten-I/O synchron aus
  • Keine integrierte Möglichkeit, Fehler zu signalisieren
  • Die API ist weder typsicher noch reaktiv

DataStore kommt ins Spiel

DataStore ist der moderne Ersatz, der auf Kotlin-Coroutines und Flow basiert. Alle Festplattenzugriffe werden außerhalb des Hauptthreads ausgeführt, und die Daten werden als beobachtbarer Stream bereitgestellt.

Es gibt zwei Varianten: Preferences DataStore (Schlüssel-Wert) und Proto DataStore (typisierte Objekte).

Von Grund auf asynchron

DataStore blockiert niemals die UI. Lesevorgänge erfolgen über einen Flow, den Sie sammeln, und Schreibvorgänge sind suspend-Funktionen, die Sie aus einer Coroutine aufrufen.

Dadurch sind Lese- und Schreibvorgänge Ihrer Einstellungen auch im Hauptthread sicher, da die aufwendige Arbeit in einem Hintergrund-Dispatcher ausgeführt wird.

val darkMode: Flow<Boolean> = dataStore.data
    .map { prefs -> prefs[DARK_MODE_KEY] ?: false }

Reaktive Aktualisierungen

Da DataStore einen Flow bereitstellt, wird Ihre UI automatisch aktualisiert, wenn sich ein Wert ändert. Bei SharedPreferences mussten Sie dafür einen umständlichen Änderungs-Listener registrieren.

In Jetpack Compose sammeln Sie den Flow einfach mit collectAsState(), und der Bildschirm wird bei jeder Aktualisierung neu zusammengesetzt.

Transaktional und konsistent

Schreibvorgänge in DataStore sind transaktional. Eine Aktualisierung ist entweder vollständig erfolgreich oder schlägt vollständig fehl, sodass Sie niemals einen nur teilweise geschriebenen Wert lesen.

DataStore garantiert außerdem die Datenkonsistenz bei mehreren Lese- und Schreibvorgängen innerhalb desselben Prozesses.

Fehlerbehandlung

SharedPreferences verschluckt I/O-Fehler stillschweigend. DataStore macht sie sichtbar: Ein Lesevorgang kann einen IOException über den Flow ausgeben, den Sie mit catch abfangen und behandeln können.

val settings: Flow<Settings> = dataStore.data
    .catch { e ->
        if (e is IOException) emit(emptyPreferences())
        else throw e
    }
    .map { /* map to your model */ }

Wann DataStore nicht die richtige Lösung ist

DataStore eignet sich für kleine oder mittlere Schlüssel-Wert-Daten oder typisierte Daten. Es ist keine Datenbank.

  • Große Datenmengen, Abfragen und Relationen: Verwenden Sie Room
  • Dateien, Bilder und Medien: Verwenden Sie das Dateisystem
  • Eine Handvoll Einstellungen: Verwenden Sie DataStore

Abhängigkeit hinzufügen

Um Preferences DataStore zu verwenden, fügen Sie das Artefakt zu Ihrer Gradle-Datei des Moduls hinzu. Für Proto DataStore gibt es ein separates Artefakt.

dependencies {
    implementation("androidx.datastore:datastore-preferences:1.1.1")
}

Von SharedPreferences migrieren

Sie müssen nicht alles auf einmal neu schreiben. DataStore bietet SharedPreferencesMigration, um vorhandene Werte beim ersten Lesen automatisch zu übertragen.

val Context.dataStore by preferencesDataStore(
    name = "settings",
    produceMigrations = { context ->
        listOf(SharedPreferencesMigration(context, "settings"))
    }
)

Kurze Überprüfung

Testen Sie Ihr Verständnis dafür, warum DataStore bevorzugt wird.

Zusammenfassung

Sie haben gelernt, warum DataStore die moderne Wahl für Schlüssel-Wert-Einstellungen ist:

  • SharedPreferences kann den Hauptthread blockieren und ist nicht reaktiv
  • DataStore verwendet Coroutines und Flow für sicheren asynchronen Zugriff
  • Schreibvorgänge sind transaktional und verfügen über eine geeignete Fehlerbehandlung
  • Es gibt zwei Varianten: Preferences und Proto

Als Nächstes verwenden Sie den Delegate preferencesDataStore in der Praxis.

Häufig gestellte Fragen

Ist die Lektion „DataStore oder SharedPreferences“ kostenlos?

Ja — der vollständige Text von „DataStore oder SharedPreferences“ 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 „DataStore oder SharedPreferences“?

Erfahren Sie, warum DataStore die moderne Wahl ist. 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 „DataStore oder SharedPreferences“?

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. DataStore oder SharedPreferences
  2. Preferences DataStore
  3. Einstellungen lesen und schreiben
  4. Proto DataStore
← Zurück zu Android Academy