DataStore
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.
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
- Réduction 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 à transmettreTestScope.backgroundScope
lors de l'initialisation deDataStore
dans vos tests.
- Notez que cette modification peut déclencher
- Résolution du problème d'interblocage des appels
updateData
imbriqués sur la même instance. (b/241760537). DataStore
ne génère plusIOExceptions
s'il ne supprime pasSharedPreferences
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 deDataStore
. (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
etokio.Path
) pour être cohérent aveccreateMultiProcessCoordinator
. (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 unInterProcessCoordinator
afin qu'il puisse être utilisé sur Android avecMultiProcessCoordinator
. (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
versandroidx.datastore.core
. - Ajout d'une méthode de fabrique dans
androidx.datastore.core.MultiProcessDataStoreFactory
pour créer des instances DataStore avec des objetsStorage
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 deInterProcessCoordinator
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 deMultiProcessDataStoreFactory#create
pour créer ces instancesDataStore
. - 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 fabriquesDataStore
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 avecMIGRATE_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
etRxDataMigration
). Les artefactsdatastore-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")
devientintPreferencesKey("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
- Premier signalement du plantage : b/173036843
- (I4712d, b/173036843)
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 etandroidx.datastore:datastore
contient les API qui dépendent d'Android (y comprisSharedPreferencesMigration
et le constructeurContext.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
surDataStoreFactory
etPreferenceDataStoreFactory
, 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.