0Pricing
Android Academy · Leçon

DataStore ou SharedPreferences

Découvrez pourquoi DataStore est le choix moderne.

DataStore ou SharedPreferences est une leçon Android Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Android Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Android Academy comprend 4 leçons au total.

Stocker de petits paramètres

Presque toutes les applications doivent mémoriser de petites informations : un bouton de mode sombre, le dernier onglet utilisé ou un nom d’utilisateur. Il s’agit de préférences clé-valeur, et non de données relationnelles volumineuses.

Pendant des années, Android a utilisé SharedPreferences pour cela. Aujourd’hui, la solution recommandée est DataStore.

Qu’est-ce que SharedPreferences ?

SharedPreferences est un magasin clé-valeur simple, fondé sur XML. Vous obtenez un éditeur, enregistrez des valeurs, puis validez les modifications.

  • Facile à utiliser
  • Intégré au framework
  • API synchrone susceptible de bloquer le thread d’interface
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
prefs.edit().putBoolean("dark_mode", true).apply()
val dark = prefs.getBoolean("dark_mode", false)

Les problèmes de SharedPreferences

SharedPreferences présente de véritables faiblesses :

  • les lectures getX() peuvent bloquer le thread appelant (souvent le thread principal) ;
  • commit() effectue les entrées-sorties du disque de manière synchrone ;
  • aucun moyen intégré de signaler les erreurs ;
  • l’API n’est ni sûre du point de vue des types ni réactive.

Adopter DataStore

DataStore est le remplacement moderne, basé sur les coroutines et Flow de Kotlin. Il effectue toutes les opérations sur le disque en dehors du thread principal et expose les données sous forme de flux observable.

Il existe deux variantes : Preferences DataStore (clé-valeur) et Proto DataStore (objets typés).

Asynchrone par conception

DataStore ne bloque jamais l’interface utilisateur. Les lectures passent par un Flow que vous collectez, et les écritures sont des fonctions suspend que vous appelez depuis une coroutine.

Ainsi, la lecture et l’écriture de vos paramètres restent sûres même sur le thread principal, car les opérations lourdes sont exécutées par un répartiteur en arrière-plan.

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

Mises à jour réactives

Comme DataStore expose un Flow, votre interface se met automatiquement à jour lorsqu’une valeur change. Avec SharedPreferences, vous deviez enregistrer un écouteur de changements peu pratique.

Dans Jetpack Compose, il vous suffit d’appliquer collectAsState() au flux, et l’écran est recomposé à chaque mise à jour.

Transactionnel et cohérent

Les écritures de DataStore sont transactionnelles. Une mise à jour réussit entièrement ou échoue entièrement : vous ne lisez donc jamais une valeur partiellement écrite.

DataStore garantit également la cohérence des données entre plusieurs lectures et écritures au sein d’un même processus.

Gestion des erreurs

SharedPreferences masque silencieusement les problèmes d’entrées-sorties. DataStore les signale : une lecture peut émettre une IOException par le flux, que vous pouvez intercepter avec catch et traiter.

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

Quand DataStore n’est pas la bonne solution

DataStore est destiné aux données clé-valeur ou typées de petite ou moyenne taille. Ce n’est pas une base de données.

  • Grands ensembles de données, requêtes et relations : utilisez Room
  • Fichiers, images et contenus multimédias : utilisez le système de fichiers
  • Quelques paramètres : utilisez DataStore

Ajout de la dépendance

Pour utiliser Preferences DataStore, ajoutez l’artefact au fichier Gradle de votre module. Un artefact distinct existe pour Proto DataStore.

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

Migration depuis SharedPreferences

Vous n’avez pas besoin de tout réécrire d’un coup. DataStore propose SharedPreferencesMigration pour copier automatiquement les valeurs existantes lors de la première lecture.

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

Vérification rapide

Vérifiez votre compréhension des raisons pour lesquelles DataStore est privilégié.

Récapitulatif

Vous avez appris pourquoi DataStore est le choix moderne pour les paramètres clé-valeur :

  • SharedPreferences peut bloquer le thread principal et n’est pas réactif
  • DataStore utilise les coroutines et Flow pour un accès asynchrone sécurisé
  • Les écritures sont transactionnelles et bénéficient d’une gestion appropriée des erreurs
  • Deux variantes existent : Preferences et Proto

Vous allez maintenant utiliser le délégué preferencesDataStore en pratique.

Questions Fréquemment Posées

La leçon « DataStore ou SharedPreferences » est-elle gratuite ?

Oui — le texte complet de « DataStore ou SharedPreferences » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Android Academy, passe à CoddyKit PRO. Le cours Android Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « DataStore ou SharedPreferences » ?

Découvrez pourquoi DataStore est le choix moderne. Tu pratiques Android Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Android Academy ?

Aucune expérience préalable n'est requise. Android Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « DataStore ou SharedPreferences » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Android Academy ?

Oui. Chaque leçon Android Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. DataStore ou SharedPreferences
  2. DataStore de préférences
  3. Lire et écrire des paramètres
  4. Proto DataStore
← Retour à Android Academy