0Pricing
Android Academy · Lección

DataStore frente a SharedPreferences

Descubra por qué DataStore es la opción moderna

DataStore frente a SharedPreferences es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Android Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Android Academy incluye 4 lecciones en total.

Guardar configuraciones pequeñas

Casi todas las aplicaciones necesitan recordar pequeñas cantidades de datos: un interruptor del modo oscuro, la última pestaña utilizada o un nombre de usuario. Estas son preferencias de clave-valor, no datos relacionales de gran tamaño.

Durante años, Android utilizó SharedPreferences para esto. Actualmente, la solución recomendada es DataStore.

Qué es SharedPreferences

SharedPreferences es un almacén sencillo de clave-valor respaldado por XML. Obtiene un editor, introduce valores y los confirma.

  • Fácil de usar
  • Integrado en el framework
  • API síncrona que puede bloquear el hilo de la interfaz
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
prefs.edit().putBoolean("dark_mode", true).apply()
val dark = prefs.getBoolean("dark_mode", false)

Problemas de SharedPreferences

SharedPreferences tiene limitaciones importantes:

  • Las lecturas de getX() pueden bloquear el hilo que realiza la llamada (a menudo el hilo principal).
  • commit() realiza E/S de disco de forma síncrona.
  • No ofrece una forma integrada de indicar errores.
  • La API no es segura en cuanto a tipos ni reactiva.

Entra en escena DataStore

DataStore es el sustituto moderno basado en las corrutinas y Flow de Kotlin. Realiza todo el trabajo de disco fuera del hilo principal y expone los datos como un flujo observable.

Hay dos variantes: Preferences DataStore (clave-valor) y Proto DataStore (objetos tipados).

Asíncrono por diseño

DataStore nunca bloquea la interfaz. Las lecturas se realizan mediante un Flow que recopila, y las escrituras son funciones suspend que se llaman desde una corrutina.

Esto significa que las lecturas y escrituras de configuración son seguras incluso en el hilo principal, porque el trabajo pesado se realiza en un dispatcher en segundo plano.

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

Actualizaciones reactivas

Como DataStore expone un Flow, la interfaz se actualiza automáticamente cuando cambia un valor. Con SharedPreferences tenía que registrar un listener de cambios poco práctico.

En Jetpack Compose, solo tiene que aplicar collectAsState() al flujo y la pantalla se recompone con cada actualización.

Transaccional y coherente

Las escrituras de DataStore son transaccionales. Una actualización se completa correctamente o falla por completo, por lo que nunca se lee un valor escrito a medias.

También garantiza la coherencia de los datos entre varias lecturas y escrituras dentro del mismo proceso.

Gestión de errores

SharedPreferences ignora silenciosamente los problemas de E/S. DataStore los muestra: una lectura puede emitir una IOException a través del flujo, que puede capturar con catch y gestionar.

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

Cuándo no es adecuada DataStore

DataStore está pensada para datos pequeños o medianos de clave-valor o tipados. No es una base de datos.

  • Grandes conjuntos de datos, consultas y relaciones: use Room
  • Archivos, imágenes y contenido multimedia: use el sistema de archivos
  • Un pequeño conjunto de configuraciones: use DataStore

Añadir la dependencia

Para usar Preferences DataStore, añada el artefacto al archivo Gradle de su módulo. Existe un artefacto independiente para Proto DataStore.

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

Migrar desde SharedPreferences

No tiene que reescribirlo todo de una vez. DataStore ofrece SharedPreferencesMigration para copiar automáticamente los valores existentes durante la primera lectura.

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

Comprobación rápida

Compruebe su comprensión de por qué se prefiere DataStore.

Resumen

Ha aprendido por qué DataStore es la opción moderna para las preferencias de tipo clave-valor:

  • SharedPreferences puede bloquear el subproceso principal y no es reactivo
  • DataStore usa corrutinas y Flow para un acceso asíncrono seguro
  • Las escrituras son transaccionales y cuentan con un manejo adecuado de errores
  • Existen dos variantes: Preferences y Proto

A continuación usará el delegado preferencesDataStore en la práctica.

Preguntas frecuentes

¿La lección «DataStore frente a SharedPreferences» es gratis?

Sí — el texto completo de «DataStore frente a SharedPreferences» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Android Academy, actualiza a CoddyKit PRO. El curso de Android Academy incluye 4 lecciones en total.

¿Qué aprenderé en «DataStore frente a SharedPreferences»?

Descubra por qué DataStore es la opción moderna Practicas Android Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Android Academy?

No se requiere experiencia previa. Android Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «DataStore frente a SharedPreferences»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Android Academy?

Sí. Cada lección de Android Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. DataStore frente a SharedPreferences
  2. Preferences DataStore
  3. Leer y escribir configuraciones
  4. Proto DataStore
← Volver a Android Academy