Middle
¿Ha trabajado con DataStore Preferences?
sobes.tech AI
Respuesta de la IA
Sí, he trabajado con Jetpack DataStore Preferences.
Es una forma moderna y más segura de almacenar pequeños volúmenes de datos en comparación con SharedPreferences. Está basado en Kotlin Coroutines y Flow, lo que lo hace asíncrono, resistente a fallos y seguro para hilos.
Las principales ventajas de DataStore Preferences:
- Asincronía: Las operaciones de lectura y escritura se realizan de forma asíncrona, sin bloquear el hilo principal.
- Seguridad: Soporta operaciones de actualización atómicas, previniendo la corrupción de datos.
- Seguridad para hilos: Seguro para su uso en entornos multihilo.
- Soporte para Flow: Uso de Flow para obtener actualizaciones de datos en tiempo real.
- Tipificación estricta: Soporta diferentes tipos de datos mediante
Preferences.Key.
Ejemplo de uso:
Crear DataStore:
// preferences_datastore.kt
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
Crear claves para almacenar datos:
// PreferencesKeys.kt
object PreferencesKeys {
val EXAMPLE_COUNTER = intPreferencesKey("example_counter")
val EXAMPLE_TEXT = stringPreferencesKey("example_text")
val EXAMPLE_BOOLEAN = booleanPreferencesKey("example_boolean")
}
Leer datos:
// ExampleUsage.kt
// Leer valor de Flow
scope.launch {
context.dataStore.data
.map { preferences ->
// Obtener valor por clave, proporcionando un valor predeterminado
preferences[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
}
.collect { counter ->
// Procesar el valor obtenido
println("Counter: $counter")
}
}
// Leer valor actual usando first()
scope.launch {
val counter = context.dataStore.data.first()[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
println("Contador actual: $counter")
}
Escribir datos:
// ExampleUsage.kt
scope.launch {
context.dataStore.edit { settings ->
// Actualizar valor por clave
settings[PreferencesKeys.EXAMPLE_COUNTER] = (settings[PreferencesKeys.EXAMPLE_COUNTER] ?: 0) + 1
settings[PreferencesKeys.EXAMPLE_TEXT] = "Nuevo valor de texto"
}
}
DataStore Preferences es adecuado para almacenar configuraciones de usuario, banderas de funciones y otra información similar, donde no se requiere una estructura de datos compleja o relaciones relacionales. Para escenarios más complejos, consideraría DataStore Proto o Room.