Datenspeicher

Daten asynchron, konsistent und transaktional speichern und so einige der Nachteile von „SharedPreferences“ überwinden
Letzte Aktualisierung Stabile Version Releasekandidat Beta-Ausgabe Alpharelease
17. April 2024 1.1.0

Abhängigkeiten deklarieren

Zum Hinzufügen einer Abhängigkeit von DataStore müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.

Es gibt zwei Implementierungen von DataStore: Einstellungen und Proto. Wählen Sie eine der beiden Optionen aus. Sie können in beide Implementierungen auch Abhängigkeiten ohne Android hinzufügen.

Fügen Sie die Abhängigkeiten für die benötigte Implementierung in die Datei build.gradle für Ihre Anwendung oder Ihr Modul ein:

Datenspeicher von Einstellungen

Groovig

    // Preferences DataStore (SharedPreferences like APIs)
    dependencies {
        implementation "androidx.datastore:datastore-preferences:1.1.0"

        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-preferences-rxjava2:1.1.0"

        // optional - RxJava3 support
        implementation "androidx.datastore:datastore-preferences-rxjava3:1.1.0"
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation "androidx.datastore:datastore-preferences-core:1.1.0"
    }
    

Kotlin

    // Preferences DataStore (SharedPreferences like APIs)
    dependencies {
        implementation("androidx.datastore:datastore-preferences:1.1.0")

        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-preferences-rxjava2:1.1.0")

        // optional - RxJava3 support
        implementation("androidx.datastore:datastore-preferences-rxjava3:1.1.0")
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation("androidx.datastore:datastore-preferences-core:1.1.0")
    }
    

Proto-Datenspeicher

Groovig

    // Typed DataStore (Typed API surface, such as Proto)
    dependencies {
        implementation "androidx.datastore:datastore:1.1.0"

        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-rxjava2:1.1.0"

        // optional - RxJava3 support
        implementation "androidx.datastore:datastore-rxjava3:1.1.0"
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation "androidx.datastore:datastore-core:1.1.0"
    }
    

Kotlin

    // Typed DataStore (Typed API surface, such as Proto)
    dependencies {
        implementation("androidx.datastore:datastore:1.1.0")

        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-rxjava2:1.1.0")

        // optional - RxJava3 support
        implementation("androidx.datastore:datastore-rxjava3:1.1.0")
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation("androidx.datastore:datastore-core:1.1.0")
    }
    

Feedback

Dein Feedback hilft uns, Jetpack zu verbessern. Lassen Sie uns wissen, wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie eine neue erstellen. Durch Klicken auf die Stern-Schaltfläche können Sie zu einem vorhandenen Problem abstimmen.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.

Version 1.1

Version 1.1.0

17. April 2024

androidx.datastore:datastore-*:1.1.0 wird freigegeben. Version 1.1.0 enthält diese Commits.

Wichtige Änderungen seit Release 1.0.0

Weitere Informationen finden Sie in den Versionshinweisen der Alpha- und Betaversionen von 1.1.0. Einige der wichtigsten Updates in 1.1.0 sind:

  • DataStore unterstützt jetzt mehrere Prozesse, die auf dieselbe Datei zugreifen, und bietet Unterstützung für prozessübergreifende Beobachtbarkeit.
  • Mit der neuen Storage-Schnittstelle können Sie anpassen, wie Ihre Datenmodelle gespeichert oder geparst werden sollen.
  • Sie können DataStore jetzt in Kotlin-Multiplattform-Projekten verwenden.

Version 1.1.0-rc01

3. April 2024

androidx.datastore:datastore-*:1.1.0-rc01 wird freigegeben. Version 1.1.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Leistungseinbußen wurden behoben, bei dem updateData-Aufrufe für Laufwerkschreibvorgänge nicht optimiert wurden, wenn die neuen Daten mit den alten Daten identisch waren (d64cfb5).
  • Eine Race-Bedingung wurde behoben, bei der MultiProcess DataStore während der Initialisierung Entwertungen übersehen könnte. ((b/326141553),(094c2dd))

Version 1.1.0-beta02

6. März 2024

androidx.datastore:datastore-*:1.1.0-beta02 wird freigegeben. Version 1.1.0-beta02 enthält diese Commits.

Fehlerkorrekturen

  • Bei der Leistungsverbesserung für DataStore werden nur dann Update-Benachrichtigungen erfasst, wenn sie auch beobachtet werden. (b/267792241)
    • Hinweis: Durch diese Änderung wird möglicherweise UncompletedCoroutinesError in deinen Tests ausgelöst, wenn du die Bibliothek für Coroutinen-Tests verwendest. Achten Sie darauf, dass beim Initialisieren von DataStore in Ihren Tests TestScope.backgroundScope besteht, um dieses Problem zu vermeiden.
  • Das Problem mit verschachtelten updateData-Aufrufen für dieselbe Instanz wurde behoben, durch die ein Deadlock verursacht wurde. (b/241760537)
  • DataStore löst keine IOExceptions mehr aus, wenn SharedPreferences während der Migration nicht gelöscht werden kann. (b/195553816)
  • Das Problem, dass das Umbenennen von Dateien während updateData in Nicht-Android-JVM-Umgebungen fehlschlug, wurde behoben. (b/203087070)
  • Das Problem, dass CorruptionException nach der Initialisierung von DataStore nicht verarbeitet wurde, wurde behoben. (b/289582516)

Version 1.1.0-beta01

10. Januar 2024

androidx.datastore:datastore-*:1.1.0-beta01 wurde ohne Änderungen seit 1.1.0-alpha07 veröffentlicht. Version 1.1.0-beta01 enthält diese Commits.

Version 1.1.0-alpha07

29. November 2023

androidx.datastore:datastore-*:1.1.0-alpha07 wird freigegeben. Version 1.1.0-alpha07 enthält diese Commits.

API-Änderungen

  • MultiProcessDataStoreFactory-Methoden befinden sich nicht mehr in der Testphase.Die Anmerkung @ExperimentalMultiProcessDataStore wurde vollständig entfernt. (Ieee54, I8e607)

Fehlerkorrekturen

  • Einführung der @ExperimentalMultiProcessDataStore-Annotationen in Version 1.1.0-alpha07. (I8e607)

Version 1.1.0-alpha06

1. November 2023

androidx.datastore:datastore-*:1.1.0-alpha06 wird freigegeben. Version 1.1.0-alpha06 enthält diese Commits.

API-Änderungen

  • Die Factory-Methode createSingleProcessCoordinator empfängt jetzt einen Dateipfad (String, java.io.File und okio.Path), der mit createMultiProcessCoordinator konsistent ist. (I211c8, b/305755935)

Version 1.1.0-alpha05

6. September 2023

androidx.datastore:datastore-*:1.1.0-alpha05 wird freigegeben. Version 1.1.0-alpha05 enthält diese Commits.

API-Änderungen

  • Datastore FileStorage ist jetzt öffentlich verfügbar, sodass Clients benutzerdefinierte Parameter angeben können. (Icb985)
  • Der OkioStorage-Konstruktor wurde so geändert, dass ein InterProcessCoordinator-Element akzeptiert wird, damit es unter Android mit MultiProcessCoordinator verwendet werden kann. (Iecea3)

Fehlerkorrekturen

  • Fehlerbehebung: MultiProcessCoordinator kann nicht mehrere Dateien im selben Verzeichnis nicht überwachen.
  • Fehlerkorrektur: Es konnten keine doppelten Dateien erkannt werden, wenn die Dateipfade nicht normalisiert sind.
  • Korrigieren Sie die falschen Werte, die von RxDataStore#isDisposed zurückgegeben wurden.
  • Fehlende Proguard-Konfiguration für datstore-preferences-core Artefakt wurde korrigiert.

Version 1.1.0-alpha04

5. April 2023

androidx.datastore:datastore-*:1.1.0-alpha04 wird freigegeben. Version 1.1.0-alpha04 enthält diese Commits.

Fehlerkorrekturen

  • Verbessern Sie die interne Implementierung, um eine Race-Bedingung zu vermeiden, bei der der Datenfluss von DataStore nach einer Aktualisierung möglicherweise einen älteren Wert ausgibt.

Version 1.1.0-alpha03

24. März 2023

androidx.datastore:datastore-*:1.1.0-alpha03 wird freigegeben.

Fehlerkorrekturen

  • Abhängigkeitseinschränkungen aus Maven-Artefakten wurden entfernt, um ein Build-Problem in nativen Kotlin-Zielen zu umgehen (b/274786186 und KT-57531).

Version 1.1.0-alpha02

22. März 2023

androidx.datastore:datastore-*:1.1.0-alpha02 wird freigegeben. Version 1.1.0-alpha02 enthält diese Commits.

Hinweise

Beachten Sie, dass diese Version einen wichtigen internen Refaktor enthält, mit dem die Implementierungen für DataStore-Implementierungen mit einem einzelnen und mehreren Prozessen zusammengeführt werden. Achten Sie dabei auf mögliche unbeabsichtigte Verhaltensänderungen, z.B. den Zeitpunkt von Benachrichtigungen zu Updates. Mit der Problemverfolgungskomponente können Sie solche Änderungen melden.

Neue Funktionen

  • Sie können jetzt DataStore in KMM-Projekten verwenden. Hinweis: Nicht-Android-Ziele von DataStore befinden sich noch in der Testphase. Wir haben jedoch beschlossen, Versionen zusammenzuführen, um Entwicklern das Ausprobieren zu erleichtern.
  • Funktionen für mehrere Prozesse wurden von androidx.datastore.multiprocess nach androidx.datastore.core verschoben.
  • Fügen Sie eine neue Factory-Methode in androidx.datastore.core.MultiProcessDataStoreFactory hinzu, um DataStore-Instanzen mit Storage-Objekten für Dateivorgänge zu erstellen.
  • Fügen Sie eine neue Schnittstelle InterProcessCoordinator hinzu, mit der mehrere Datenspeicherinstanzen über Prozesse hinweg kommunizieren können. Hinweis: Die Multi-Prozess-Implementierung von InterProcessCoordinator ist nur unter Android verfügbar.

API-Änderungen

  • Fügen Sie in der Datastore-Core-Schnittstelle InterProcessCoordinator zu StorageConnection hinzu (I555bb)
  • Ändern Sie APIs im Datenspeicherkern MultiProcessDataStoreFactory zur Verwendung von Storage. (Iac02f)
  • Öffentliche APIs in datastore-multiprocess zum Datastore-Core (I76d7c) verschieben
  • Offengelegtes PreferencesSerializer aus datastore-preferences-core (I4b788)
  • Anmerkung @JvmDefaultWithCompatibility hinzufügen (I8f206)

Version 1.1.0-alpha01

9. November 2022

androidx.datastore:datastore-*:1.1.0-alpha01 wird freigegeben. Version 1.1.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Unterstützung von Multi-Prozess-Anwendungsfällen, bei denen Datenkonsistenz unter DataStore Instanzen prozessübergreifend garantiert ist. Fügen Sie MultiProcessDataStoreFactory#create hinzu, um solche DataStore-Instanzen zu erstellen.
  • Neue Speicheroberfläche, mit der der zugrunde liegende Speichermechanismus für Datastore ausgetauscht werden kann. Implementierungen für java.io und okio sind verfügbar. DataStore-Factorys haben neue Methoden, die dieses Speicherobjekt akzeptieren.

API-Änderungen

  • Ändern Sie APIs im Datenspeicherkern MultiProcessDataStoreFactory zur Verwendung von Storage. (Iac02f)
  • Öffentliche APIs in datastore-multiprocess zum Datastore-Core (I76d7c) verschieben
  • Offengelegtes PreferencesSerializer aus datastore-preferences-core (I4b788)

Version 1.0.0

Version 1.0.0

4. August 2021

androidx.datastore:datastore-*:1.0.0 wird freigegeben. Version 1.0.0 enthält diese Commits.

Hauptfunktionen von Version 1.0.0

Jetpack DataStore ist eine Datenspeicherlösung, mit der Sie Schlüssel/Wert-Paare oder typisierte Objekte mit Protokollpuffern speichern können. DataStore verwendet Kotlin-Koroutinen und Flow, um Daten asynchron, konsistent und transaktional zu speichern.

Version 1.0.0-rc02

21. Juli 2021

androidx.datastore:datastore-*:1.0.0-rc02 wird freigegeben. Version 1.0.0-rc02 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde klargestellt, dass SharedPreferencesMigration nicht ausgeführt wird, wenn keine Schlüssel vorhanden sind. (Icfa32, b/192824325)
  • Es wurde ein Fehler behoben, bei dem mit MIGRATE_ALL_KEYS erstellte SharedPreferencesMigration eine Ausnahme auslösten, wenn der angeforderte Schlüssel noch nicht vorhanden war. (Ie318a, b/192824325)

Version 1.0.0-rc01

30. Juni 2021

androidx.datastore:datastore-*:1.0.0-rc01 wird freigegeben. Version 1.0.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem die Java-Datei versehentlich in die endgültige JAR-Datei eingefügt wurde (I65d96, b/188985637).

Version 1.0.0-beta02

16. Juni 2021

androidx.datastore:datastore-*:1.0.0-beta02 wird freigegeben. Version 1.0.0-beta02 enthält diese Commits.

Fehlerkorrekturen

Version 1.0.0-beta01

21. April 2021

androidx.datastore:datastore-*:1.0.0-beta01 wird freigegeben. Version 1.0.0-beta01 enthält diese Commits.

API-Änderungen

  • JVM-Überlastungen für reine Kotlin-Methoden entfernen (I2adc7)

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, bei dem Datenspeicherdelegierte zu Informationslecks bei Kontexten führen konnten (Ie96fc, b/184415662).

Version 1.0.0-alpha08

10. März 2021

androidx.datastore:datastore-*:1.0.0-alpha08 wird freigegeben. Version 1.0.0-alpha08 enthält diese Commits.

API-Änderungen

  • Sie können Ihrem dataStore- und preferencesDataStore-Property-Delegaten jetzt eine Migration hinzufügen, die vom Kontext abhängig ist. (I4ef69, b/173726702)
  • Fügt Hilfsfunktionen zum Abrufen des Dateinamens hinzu, wenn Sie den Datastore-Delegaten oder context.createDataStore nicht mehr verwenden (I60f9a)
  • Die Serializer „writeTo“ und „readFrom“ werden jetzt angehalten. Wenn Sie einen Serializer implementiert haben, müssen Sie Ihre Funktionen so aktualisieren, dass sie zum Anhalten geeignet sind. (I1e58e)
  • Attributdelegierte für RxDataStore-Nutzer hinzugefügt. (Ied768, b/173726702)

Fehlerkorrekturen

  • Einschränkungen für die öffentliche Nutzung experimenteller APIs erzwingen (I6aa29, b/174531520)

Version 1.0.0-alpha07

24. Februar 2021

androidx.datastore:datastore-*:1.0.0-alpha07 wird freigegeben. Version 1.0.0-alpha07 enthält diese Commits.

API-Änderungen

  • Die Erweiterungsfunktion „Context.createDataStore“ wurde entfernt und durch den Property-Delegaten „globalDataStore“ ersetzt. Rufen Sie globalDataStore einmal auf der obersten Ebene Ihrer Kotlin-Datei auf. Beispiele:

    val Context.myDataStore by dataStore(...)
    

    Legen Sie dies auf der obersten Ebene Ihrer Kotlin-Datei ab, sodass nur eine Instanz vorhanden ist. (I57215, b/173726702)

  • Die RxDataStore-Funktionen befinden sich jetzt in einer RxDataStore-Klasse anstelle von Erweiterungsfunktionen in DataStore. (Idccdb, b/177691248)

  • Wenn Sie EncryptedSharedPreferences (oder SharedPreferences) für den direkten Start zu DataStore migrieren möchten, können Sie dies mit dem neuen Konstruktor „SharedPreferencesMigration“ tun, mit dem sich die SharedPreferences-Einstellungen einschleusen lassen. (I8e04e, b/177278510)

Fehlerkorrekturen

  • DataStore gibt jetzt eine Ausnahme aus, wenn mehrere aktive Datenspeicher für dieselbe Datei vorhanden sind. Wenn Sie Ihren DataStore nicht als Singleton verwaltet haben oder nicht sichergestellt haben, dass keine zwei Instanzen von DataStore gleichzeitig für eine Datei aktiv sind, können jetzt beim Lesen oder Schreiben in DataStore Ausnahmen auftreten. Sie können diese Probleme beheben, indem Sie Ihren Datenspeicher als Singleton verwalten. (Ib43f4, b/177691248)
  • Das Abbruchverhalten beim Abbruch des Aufrufbereichs wurde behoben. (I2c7b3)

Version 1.0.0-alpha06

13. Januar 2021

androidx.datastore:datastore-*:1.0.0-alpha06 wird freigegeben. Version 1.0.0-alpha06 enthält diese Commits.

Neue Funktionen

  • RxJava-Wrapper für DataStore hinzugefügt. Die datastore-rxjava2/3-Artefakte enthalten die Wrapper für die zentralen DataStore-APIs (RxDataStore, RxDataStoreBuilder und RxDataMigration). Die datastore-preferences-rxjava2/3-Artefakte enthalten einen Builder zum Erstellen eines Preferred DataStores.

API-Änderungen

  • Blendet die CorruptionHandler-Oberfläche aus. Es gab keinen Grund dafür, öffentlich zu sein, da die DataStore-Factory nur einen ReplaceFileCorruptionHandler akzeptiert. (I0b3b3, b/176032264)
  • Die Methode preferencesKey<T>(name: String): Key<T> wurde entfernt und durch spezifische Methoden für die einzelnen unterstützten Typen ersetzt. Beispielsweise ist preferencesKey<Int>("int") jetzt intPreferencesKey("int") (Ibcfac, b/170311106).

Fehlerkorrekturen

  • Behebt die Dokumentation zu DataStoreFactory, bei der die Tatsache ausgelassen wurde, dass die Datenspeicherdatei im Unterverzeichnis „datastore/“ erstellt wird. (Ica222)

Version 1.0.0-alpha05

2. Dezember 2020

androidx.datastore:datastore-*:1.0.0-alpha05 wird freigegeben. Version 1.0.0-alpha05 enthält diese Commits.

Fehlerkorrekturen

  • Bessere Dokumentation und Ausnahmen für gleichzeitige Schreibvorgänge aus Datenspeichern (Ia98a2, b/173522155, b/173726702)
  • Wir lassen jetzt zu, dass der an Serializer.writeTo() übergebene OutputStream geschlossen wird, ist aber nicht zwingend erforderlich. (I5c9bf, b/173037611)

Version 1.0.0-alpha04

17. November 2020

androidx.datastore:datastore-*:1.0.0-alpha04 wird freigegeben. Version 1.0.0-alpha04 enthält diese Commits.

Fehlerkorrekturen

  • Ein Paketproblem wurde behoben, das den folgenden Absturz im Präferenz-Datenspeicher 1.0.0-alpha03 verursachte: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences

Version 1.0.0-alpha03

11. November 2020

androidx.datastore:datastore-*:1.0.0-alpha03 wird freigegeben. Version 1.0.0-alpha03 enthält diese Commits.

Neue Funktionen

  • In den Einstellungen werden jetzt doppelte Werte unterstützt. Dies ist nützlich, wenn Sie mehr Genauigkeit als Gleitkommazahlen benötigen (I5be8f, b/169471808).

API-Änderungen

  • Es wurde eine reine Kotlin-Abhängigkeit für den Datenspeicher erstellt, um eine schnellere Kompilierung zu ermöglichen. androidx.datastore:datastore-core enthält die reinen Kotlin-APIs und androidx.datastore:datastore die von Android abhängigen APIs, einschließlich des SharedPreferencesMigration- und Context.createDataStore-Konstruktors (I42d75, b/168512698).
  • Aufteilen von Zielen für Datenspeicher von Einstellungen für eine schnellere Kotlin-Kompilierung (Ia3c19)
  • Serializer benötigen jetzt eine neue Eigenschaft für den Standardwert, der verwendet wird, wenn sich keine Daten auf dem Laufwerk befinden. Dies vereinfacht die Implementierung von benutzerdefinierten Serializern, sodass Nutzer keine Sonderfälle für leere Eingabestreams machen müssen (leere Eingabestreams werden nicht mit JSON geparst).

    • Es gibt jetzt außerdem eine Prüfung, um zu bestätigen, dass der für writeTo() bereitgestellte Ausgabestream nicht geschlossen ist. Wenn er geschlossen ist, löst er Ausnahmen aus (I16e29).
  • Sie machen den Konstruktor für SharedPreferencesView intern. Sie war ursprünglich öffentlich, um Tests zu ermöglichen. Für Tests sollte stattdessen eine SharedPreferencesMigration erstellt und getestet werden. (I93891)

Fehlerkorrekturen

  • Der produceFile-Parameter für DataStoreFactory und PreferenceDataStoreFactory ist jetzt der letzte Parameter in der Liste, sodass Sie die nachgestellte Kotlin-Lambda-Syntax verwenden können. (Ibe7f1, b/169425442)
  • Unter Berücksichtigung der neuen expliziten API-Anforderungen für Kotlin (I5ae1e)

Bekannte Probleme

  • Präferenz-Datenspeicher stürzt mit java.lang.NoClassDefFoundError ab. (b/173036843)

Version 1.0.0-alpha02

14. Oktober 2020

androidx.datastore:datastore-core:1.0.0-alpha02 und androidx.datastore:datastore-preferences:1.0.0-alpha02 werden veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.

Fehlerkorrekturen

  • Eine Absicherung gegen Mutation im Datenspeicherkern wurde hinzugefügt. Mutation unterbricht die Datenspeichernutzung für Personen, die Datastore mit Nicht-Proto-/Nicht-Einstellungen-Typen verwenden (I6aa84)
  • Eine toString-Methode wurde zu "Preferences.kt" hinzugefügt, um das Debuggen des aktuellen Status zu vereinfachen (I96006).
  • Ausnahme zum Schutz vor Missbrauch von DataStore.Preferences (I1134d) hinzugefügt
  • Es wurde ein Fehler behoben, der dazu führte, dass die App beim Start abstürzte (I69237, b/168580258).

Version 1.0.0-alpha01

2. September 2020

androidx.datastore:datastore-core:1.0.0-alpha01 und androidx.datastore:datastore-preferences:1.0.0-alpha01 werden veröffentlicht. Version 1.0.0-alpha01 enthält diese Commits.

Neue Funktionen

Jetpack DataStore ist eine neue und verbesserte Datenspeicherlösung, die SharedPreferences ersetzen soll. DataStore basiert auf Kotlin-Koroutinen und Flow und bietet zwei verschiedene Implementierungen:

  • Proto DataStore zum Speichern typisierter Objekte (unterstützt durch Protokollpuffer)
  • Einstellungen für DataStore, in dem Schlüssel/Wert-Paare gespeichert werden

Die Daten werden asynchron, konsistent und transaktional gespeichert, wodurch die meisten Nachteile von "SharedPreferences" überwunden werden.