Sobes.tech
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.