Avez-vous travaillé avec DataStore Preferences?
sobes.tech IA
Réponse de l'IA
Oui, j’ai travaillé avec Jetpack DataStore Preferences.
C’est une méthode moderne et plus sûre pour stocker de petites quantités de données par rapport à SharedPreferences. Elle est basée sur Kotlin Coroutines et Flow, ce qui la rend asynchrone, résistante aux pannes et sûre pour les threads.
Les principaux avantages de DataStore Preferences :
- Asynchronie : Les opérations de lecture et d’écriture sont effectuées de manière asynchrone, sans bloquer le thread principal.
- Sécurité : Supporte des opérations de mise à jour atomiques, évitant la corruption des données.
- Sécurité pour les threads : Sûr à utiliser dans un environnement multithread.
- Support Flow : Utilisation de Flow pour recevoir des mises à jour en temps réel.
- Typage strict : Supporte différents types de données via
Preferences.Key.
Exemple d’utilisation :
Créer DataStore :
// preferences_datastore.kt
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
Créer des clés pour stocker des données :
// PreferencesKeys.kt
object PreferencesKeys {
val EXAMPLE_COUNTER = intPreferencesKey("example_counter")
val EXAMPLE_TEXT = stringPreferencesKey("example_text")
val EXAMPLE_BOOLEAN = booleanPreferencesKey("example_boolean")
}
Lecture des données :
// ExampleUsage.kt
// Lecture de la valeur via Flow
scope.launch {
context.dataStore.data
.map { preferences ->
// Obtenir la valeur par clé, avec une valeur par défaut
preferences[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
}
.collect { counter ->
// Traiter la valeur reçue
println("Compteur : $counter")
}
}
// Lecture de la valeur actuelle avec first()
scope.launch {
val counter = context.dataStore.data.first()[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
println("Compteur actuel : $counter")
}
Écriture des données :
// ExampleUsage.kt
scope.launch {
context.dataStore.edit { settings ->
// Mettre à jour la valeur par clé
settings[PreferencesKeys.EXAMPLE_COUNTER] = (settings[PreferencesKeys.EXAMPLE_COUNTER] ?: 0) + 1
settings[PreferencesKeys.EXAMPLE_TEXT] = "Nouvelle valeur de texte"
}
}
DataStore Preferences est bien adapté pour stocker des préférences utilisateur, des drapeaux de fonctionnalités et d’autres types d’informations similaires, où une structure de données complexe ou des relations ne sont pas nécessaires. Pour des scénarios plus complexes, j’envisagerais DataStore Proto ou Room.