DataStore

Stockez les données de manière asynchrone, cohérente et transactionnelle, en éliminant certains inconvénients de SharedPreferences.
Dernière mise à jour Version stable Version finale Version bêta Version alpha
1er mai 2024 1.1.1 - - -

Déclarer des dépendances

Pour ajouter une dépendance sur DataStore, vous devez ajouter le dépôt Maven de Google à votre projet. Pour en savoir plus, consultez la section Dépôt Maven de Google.

Il existe deux implémentations de DataStore : Preferences et Proto. Choisissez l'une ou l'autre. Vous pouvez également ajouter des dépendances sans Android à chaque implémentation.

Ajoutez les dépendances de l'implémentation dont vous avez besoin dans le fichier build.gradle de votre application ou module :

Preferences DataStore

Groovy

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

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

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

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

Kotlin

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

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

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

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

Proto DataStore

Groovy

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

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

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

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

Kotlin

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

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

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

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

Commentaires

Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.

Signaler un nouveau problème

Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.

Version 1.1

Version 1.1.1

1er mai 2024

Publication d'androidx.datastore:datastore-*:1.1.1. La version 1.1.1 contient ces commits.

Correction de bugs

  • Atténuation de la fausse alerte Linux sur le message "Un interblocage des ressources se produira" dans un cas d'angle. Plusieurs instances DataStore tentent d'écrire à partir de différents processus en annulant le verrouillage du fichier.

Version 1.1.0

17 avril 2024

Publication d'androidx.datastore:datastore-*:1.1.0. La version 1.1.0 contient ces commits.

Principales modifications depuis la version 1.0.0

Pour en savoir plus, veuillez consulter les notes de version des versions alpha et bêta de la version 1.1.0. Voici quelques-unes des principales mises à jour de la version 1.1.0:

  • DataStore permet désormais à plusieurs processus d'accéder au même fichier et permet l'observabilité entre les processus.
  • La nouvelle interface de stockage vous permet de personnaliser le stockage ou la sérialisation de vos modèles de données.
  • Vous pouvez désormais utiliser DataStore dans les projets de multiplateforme Kotlin.

Version 1.1.0-rc01

3 avril 2024

Publication d'androidx.datastore:datastore-*:1.1.0-rc01. La version 1.1.0-rc01 contient ces commits.

Correction de bugs

  • Correction de la dégradation des performances qui empêchait les appels updateData d'optimiser les écritures sur disque si les nouvelles données sont identiques aux anciennes. (d64cfb5)
  • Correction d'une condition de concurrence où MultiProcess DataStore pouvait manquer des invalidations lors de l'initialisation. ((b/326141553),(094c2dd))

Version 1.1.0-beta02

6 mars 2024

Publication d'androidx.datastore:datastore-*:1.1.0-beta02. La version 1.1.0-beta02 contient ces commits.

Correction de bugs

  • L'amélioration des performances sur DataStore ne collecte les notifications de mise à jour que lorsqu'elle est observée. (b/267792241). <ph type="x-smartling-placeholder">
      </ph>
    • Notez que cette modification peut déclencher UncompletedCoroutinesError dans vos tests si vous utilisez la bibliothèque de tests de coroutines. Pour éviter ce problème, veillez à transmettre TestScope.backgroundScope lors de l'initialisation de DataStore dans vos tests.
  • Résolution du problème d'interblocage des appels updateData imbriqués sur la même instance. (b/241760537).
  • DataStore ne génère plus IOExceptions s'il ne supprime pas SharedPreferences lors de la migration. (b/195553816).
  • Correction du problème qui empêchait de renommer des fichiers pendant updateData dans des environnements JVM autres qu'Android. (b/203087070).
  • Correction du problème qui empêchait la gestion de CorruptionException après l'initialisation de DataStore. (b/289582516).

Version 1.1.0-beta01

10 janvier 2024

Publication d'androidx.datastore:datastore-*:1.1.0-beta01 sans aucune modification par rapport à la version 1.1.0-alpha07. Liste des commits de la version 1.1.0-beta01

Version 1.1.0-alpha07

29 novembre 2023

Publication d'androidx.datastore:datastore-*:1.1.0-alpha07. Liste des commits de la version 1.1.0-alpha07

Modifications apportées à l'API

  • Les méthodes MultiProcessDataStoreFactory ne sont plus expérimentales.L'annotation @ExperimentalMultiProcessDataStore a été entièrement supprimée. (Ieee54, I8e607).

Correction de bugs

  • Déployez la suppression des annotations @ExperimentalMultiProcessDataStore dans la version 1.1.0-alpha07. (I8e607).

Version 1.1.0-alpha06

1er novembre 2023

Publication d'androidx.datastore:datastore-*:1.1.0-alpha06. Liste des commits de la version 1.1.0-alpha06

Modifications apportées à l'API

  • La méthode de fabrique createSingleProcessCoordinator reçoit désormais un chemin d'accès au fichier (String, java.io.File et okio.Path) pour être cohérent avec createMultiProcessCoordinator. (I211c8, b/305755935).

Version 1.1.0-alpha05

6 septembre 2023

Publication d'androidx.datastore:datastore-*:1.1.0-alpha05. Liste des commits de la version 1.1.0-alpha05

Modifications apportées à l'API

  • Datastore FileStorage est désormais accessible au public, ce qui permet aux clients de fournir des paramètres personnalisés. (Icb985).
  • Modification du constructeur OkioStorage pour accepter un InterProcessCoordinator afin qu'il puisse être utilisé sur Android avec MultiProcessCoordinator. (Iecea3).

Correction de bugs

  • Correction de MultiProcessCoordinator qui ne parvenait pas à surveiller plusieurs fichiers dans le même répertoire.
  • Correction de l'impossibilité de détecter les fichiers en double si les chemins d'accès aux fichiers ne sont pas normalisés.
  • Corrigez les valeurs incorrectes renvoyées par RxDataStore#isDisposed.
  • Correction d'une configuration ProGuard manquante pour l'artefact datstore-preferences-core.

Version 1.1.0-alpha04

5 avril 2023

Publication d'androidx.datastore:datastore-*:1.1.0-alpha04. Liste des commits de la version 1.1.0-alpha04

Correction de bugs

  • Amélioration de l'implémentation interne pour éviter une condition de concurrence dans laquelle le flux de données de DataStore pourrait émettre une valeur plus ancienne après une mise à jour.

Version 1.1.0-alpha03

24 mars 2023

Publication d'androidx.datastore:datastore-*:1.1.0-alpha03.

Correction de bugs

  • Suppression des contraintes de dépendance des artefacts Maven pour contourner un problème de compilation dans les cibles natives Kotlin (b/274786186, KT-57531).

Version 1.1.0-alpha02

22 mars 2023

Publication d'androidx.datastore:datastore-*:1.1.0-alpha02. Liste des commits de la version 1.1.0-alpha02

Note

Notez que cette version inclut une refactorisation interne importante qui fusionne les implémentations de DataStore à processus unique et multiprocessus. Surveillez les éventuels changements de comportement inattendus (par exemple, l'heure des notifications de mise à jour). Vous pouvez utiliser le composant Issue Tracker pour signaler ces modifications.

Nouvelles fonctionnalités

  • Vous pouvez désormais utiliser DataStore dans les projets KMM. Notez que les cibles de DataStore non-Android sont encore expérimentales, mais nous avons décidé de fusionner les versions pour que les développeurs puissent les essayer plus facilement.
  • Les fonctionnalités multiprocessus ont été déplacées de androidx.datastore.multiprocess vers androidx.datastore.core.
  • Ajout d'une méthode de fabrique dans androidx.datastore.core.MultiProcessDataStoreFactory pour créer des instances DataStore avec des objets Storage pour les opérations sur les fichiers.
  • Ajout d'une nouvelle interface InterProcessCoordinator qui permet à plusieurs instances DataStore de communiquer entre les processus. Notez que l'implémentation multiprocessus de InterProcessCoordinator n'est disponible que sur Android.

Modifications apportées à l'API

  • Ajout de InterProcessCoordinator à StorageConnection dans l'interface datastore-core. (I555bb)
  • Modification des API dans le MultiProcessDataStoreFactory datastore-core pour utiliser Storage. (Iac02f)
  • Déplacement des API publiques de datastore-multiprocess vers datastore-core. (I76d7c)
  • PreferencesSerializer exposé à partir de datastore-preferences-core. (I4b788)
  • Ajout de l'annotation @JvmDefaultWithCompatibility. (I8f206)

Version 1.1.0-alpha01

9 novembre 2022

Publication de androidx.datastore:datastore-*:1.1.0-alpha01. Liste des commits de la version 1.1.0-alpha01

Nouvelles fonctionnalités

  • Compatibilité avec les cas d'utilisation multiprocessus où la cohérence des données est garantie entre les instances DataStore sur l'ensemble des processus. Ajout de MultiProcessDataStoreFactory#create pour créer ces instances DataStore.
  • Nouvelle interface de stockage permettant de désactiver le mécanisme de stockage sous-jacent pour Datastore. Des implémentations sont fournies pour java.io et okio. Les fabriques DataStore disposent de nouvelles méthodes qui acceptent cet objet Storage.

Modifications apportées à l'API

  • Modification des API dans le MultiProcessDataStoreFactory datastore-core pour utiliser Storage. (Iac02f)
  • Déplacement des API publiques de datastore-multiprocess vers datastore-core. (I76d7c)
  • PreferencesSerializer exposé à partir de datastore-preferences-core. (I4b788)

Version 1.0.0

Version 1.0.0

4 août 2021

Publication de androidx.datastore:datastore-*:1.0.0. Liste des commits de la version 1.0.0

Principales fonctionnalités de la version 1.0.0

Jetpack DataStore est une solution de stockage de données qui vous permet de stocker des paires clé-valeur ou des objets typés avec des tampons de protocole. DataStore utilise les coroutines Kotlin et Flow pour stocker les données de manière asynchrone, cohérente et transactionnelle.

Version 1.0.0-rc02

21 juillet 2021

Publication d'androidx.datastore:datastore-*:1.0.0-rc02. Liste des commits de la version 1.0.0-rc02

Correction de bugs

  • Mise à jour de la documentation pour préciser que SharedPreferencesMigration ne s'exécute pas en l'absence de clés. (Icfa32, b/192824325)
  • Correction d'un bug où SharedPreferencesMigration, construit avec MIGRATE_ALL_KEYS, générait une exception si la clé demandée n'existait pas déjà. (Ie318a, b/192824325)

Version 1.0.0-rc01

30 juin 2021

Publication de androidx.datastore:datastore-*:1.0.0-rc01. Liste des commits de la version 1.0.0-rc01

Correction de bugs

  • Correction du bug qui provoquait l'ajout involontaire du fichier .java dans le fichier JAR final. (I65d96, b/188985637)

Version 1.0.0-beta02

16 juin 2021

Publication de androidx.datastore:datastore-*:1.0.0-beta02. Liste des commits de la version 1.0.0-beta02

Correction de bugs

  • Correction de ClassVerificationFailure. (b/187450483)

Version 1.0.0-beta01

21 avril 2021

Publication de androidx.datastore:datastore-*:1.0.0-beta01. Liste des commits de la version 1.0.0-beta01

Modifications apportées à l'API

  • Suppression des surcharges JVM pour les méthodes en Kotlin uniquement. (I2adc7)

Correction de bugs

  • Correction d'un bug qui provoquait la fuite de contextes par les délégués du datastore. (Ie96fc, b/184415662)

Version 1.0.0-alpha08

10 mars 2021

Publication de androidx.datastore:datastore-*:1.0.0-alpha08. Liste des commits de la version 1.0.0-alpha08

Modifications apportées à l'API

  • Prise en charge de l'ajout d'une migration en fonction du contexte à dataStore et au délégué de propriété preferencesDataStore. (I4ef69, b/173726702)
  • Ajout de fonctions d'assistance permettant d'obtenir le nom du fichier si vous n'utilisez plus le délégué du datastore ni context.createDataStore. (I60f9a)
  • Reclassement des fonctions Serializer writeTo et readFrom comme fonctions de suspension. Si vous avez implémenté un Serializer, vous devrez convertir vos fonctions en fonctions de suspension. (I1e58e)
  • Ajout de délégués de propriété pour les utilisateurs de RxDataStore. (Ied768, b/173726702)

Correction de bugs

  • Application forcée des restrictions sur l'utilisation publique des API expérimentales. (I6aa29, b/174531520)

Version 1.0.0-alpha07

24 février 2021

Publication de androidx.datastore:datastore-*:1.0.0-alpha07. Liste des commits de la version 1.0.0-alpha07

Modifications apportées à l'API

  • Suppression de la fonction d'extension Context.createDataStore, remplacée par le délégué de propriété globalDataStore. Appelez globalDataStore une fois au niveau supérieur de votre fichier Kotlin. Exemple :

    val Context.myDataStore by dataStore(...)
    

    Placez-le au niveau supérieur du fichier Kotlin afin de n'ajouter qu'une seule instance. (I57215, b/173726702)

  • Reclassement des fonctions RxDataStore comme une classe RxDataStore, et non plus comme des fonctions d'extension de DataStore. (Idccdb, b/177691248)

  • Ajout d'un nouveau constructeur SharedPreferencesMigration, qui permet de migrer des EncryptedSharedPreferences (ou des SharedPreferences de démarrage direct) vers DataStore et d'injecter les SharedPreferences. (I8e04e, b/177278510)

Correction de bugs

  • Mise à jour de DataStore, qui génère désormais une exception lorsque plusieurs DataStores sont actifs pour le même fichier. Si vous ne gérez pas votre DataStore en tant que Singleton ou ne vérifiez pas qu'une seule instance de DataStore est active à la fois pour un fichier, des exceptions peuvent maintenant s'afficher lors de la lecture ou de l'écriture sur DataStore. Vous pouvez résoudre ces problèmes en gérant votre DataStore en tant que Singleton. (Ib43f4, b/177691248)
  • Correction du comportement en cas d'annulation du champ d'application de l'appelant. (I2c7b3)

Version 1.0.0-alpha06

13 janvier 2021

Publication de androidx.datastore:datastore-*:1.0.0-alpha06. Liste des commits de la version 1.0.0-alpha06

Nouvelles fonctionnalités

  • Ajout de wrappers RxJava pour DataStore. Les artefacts datastore-rxjava2/3 contiennent les wrappers des API DataStore principales (RxDataStore, RxDataStoreBuilder et RxDataMigration). Les artefacts datastore-preferences-rxjava2/3 contiennent un compilateur permettant de créer un Preferences DataStore.

Modifications apportées à l'API

  • Masquage de l'interface CorruptionHandler. Il n'y avait aucune raison de la rendre publique, car la fabrique DataStore n'accepte qu'un ReplaceFileCorruptionHandler. (I0b3b3, b/176032264)
  • Suppression de la méthode preferencesKey<T>(name: String): Key<T>, remplacée par des méthodes propres à chaque type compatible. Par exemple, preferencesKey<Int>("int") devient intPreferencesKey("int"). (Icfcfa, b/170311106)

Correction de bugs

  • Correction de la documentation sur DataStoreFactory afin de préciser que le fichier du datastore est créé dans le sous-répertoire "datastore/". (Ica222)

Version 1.0.0-alpha05

2 décembre 2020

Publication de androidx.datastore:datastore-*:1.0.0-alpha05. Liste des commits de la version 1.0.0-alpha05

Correction de bugs

  • Ajout d'une documentation et d'exceptions plus pertinentes concernant les écritures simultanées à partir de datastores. (Ia98a2, b/173522155, b/173726702)
  • Prise en charge de la fermeture du OutputStream transmis à Serializer.writeTo(), sans obligation. (I5c9bf, b/173037611)

Version 1.0.0-alpha04

17 novembre 2020

Publication de androidx.datastore:datastore-*:1.0.0-alpha04. Liste des commits de la version 1.0.0-alpha04

Correction de bugs

  • Correction d'un problème de packaging qui provoquait le plantage suivant dans Preferences DataStore 1.0.0-alpha03 : java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences

Version 1.0.0-alpha03

11 novembre 2020

Publication de androidx.datastore:datastore-*:1.0.0-alpha03. Liste des commits de la version 1.0.0-alpha03

Nouvelles fonctionnalités

  • Mise à jour de Preferences, qui prend désormais en charge les valeurs doubles (utile pour une meilleure précision comparé aux floats). (I5be8f, b/169471808)

Modifications apportées à l'API

  • Création d'une dépendance Kotlin pure pour le datastore permettant d'accélérer la compilation. androidx.datastore:datastore-core contient les API principales exclusivement en Kotlin et androidx.datastore:datastore contient les API qui dépendent d'Android (y compris SharedPreferencesMigration et le constructeur Context.createDataStore). (I42d75, b/168512698)
  • Division des cibles de Preferences DataStore pour une compilation Kotlin plus rapide. (Ia3c19)
  • Mise à jour des sérialiseurs, qui nécessitent désormais une nouvelle propriété pour la valeur par défaut, qui sera utilisée si le disque ne contient pas de données. Cela facilite l'implémentation des sérialiseurs personnalisés. Ainsi, les utilisateurs n'ont pas besoin de prévoir spécialement des flux d'entrée vides (ces flux ne peuvent pas être analysés avec JSON).

    • En outre, le système vérifie désormais que le flux de sortie fourni à writeTo() n'est pas fermé. Si c'est le cas, il génère des exceptions. (I16e29)
  • Conversion du constructeur de SharedPreferencesView en constructeur interne. À l'origine, il était accessible publiquement pour les tests. Il est préférable d'effectuer les tests en créant un SharedPreferencesMigration. (I93891)

Correction de bugs

  • Mise à jour du paramètre produceFile sur DataStoreFactory et PreferenceDataStoreFactory, qui figure désormais en dernier dans la liste. Vous pouvez donc utiliser la syntaxe lambda de fin de Kotlin. (Ibe7f1, b/169425442)
  • Application des nouvelles exigences concernant les API explicites pour Kotlin. (I5ae1e)

Problèmes connus

  • Plantage de Preferences DataStore avec java.lang.NoClassDefFoundError. (b/173036843)

Version 1.0.0-alpha02

14 octobre 2020

Publication de androidx.datastore:datastore-core:1.0.0-alpha02 et androidx.datastore:datastore-preferences:1.0.0-alpha02. Liste des commits de la version 1.0.0-alpha02

Correction de bugs

  • Ajout d'une protection contre les mutations dans datastore-core. La mutation bloque l'utilisation d'un DataStore autre que Proto ou Preferences. (I6aa84)
  • Ajout d'une méthode toString à Preferences.kt pour faciliter le débogage de l'état actuel (I96006)
  • Ajout d'une exception pour éviter toute utilisation abusive de DataStore.Preferences. (I1134d)
  • Correction d'un bug qui provoquait le plantage de l'application au démarrage. (I69237, b/168580258)

Version 1.0.0-alpha01

2 septembre 2020

Publication de androidx.datastore:datastore-core:1.0.0-alpha01 et androidx.datastore:datastore-preferences:1.0.0-alpha01. Liste des commits de la version 1.0.0-alpha01

Nouvelles fonctionnalités

Jetpack DataStore est une nouvelle solution de stockage de données améliorée, destinée à remplacer SharedPreferences. Basé sur les coroutines Kotlin et Flow, DataStore propose deux implémentations différentes :

  • Proto DataStore, qui permet de stocker des objets typés (grâce à des tampons de protocole)
  • Preferences DataStore, qui stocke des paires clé-valeur

Les données sont stockées de manière asynchrone, cohérente et transactionnelle, permettant ainsi de pallier la plupart des inconvénients de SharedPreferences.