Sobes.tech
Junior

¿Ha trabajado con DataStore Preferences en Android?

sobes.tech AI

Respuesta de la IA

Sí, trabajé.

Preferences de DataStore es un análogo asíncrono de SharedPreferences, incluido en AndroidX DataStore. Permite almacenar de forma segura pares clave-valor simples, usando KSP sobre Kotlin Flow o RxJava3 para trabajo asíncrono y Protobuf/Proto DataStore o Proto DataStore para tipos de datos.

Las principales ventajas de DataStore Preferences en comparación con SharedPreferences:

  • Asincronía: Funciona usando Flow o RxJava3, lo que previene bloqueos en el hilo principal y evita problemas de ANR.
  • Seguridad: Operaciones atómicas de lectura/escritura garantizan la consistencia de los datos.
  • Seguridad de tipos: Con Protobuf DataStore se puede definir un esquema de datos, lo que evita errores al trabajar con tipos.
  • Reactividad: Permite observar cambios en los datos en tiempo real.

Ejemplo de uso de DataStore Preferences con Kotlin Flow:

// Creación de DataStore
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")

// Lectura de datos
suspend fun readString(context: Context, key: String): String? {
    val preferencesKey = stringPreferencesKey(key)
    val preferences = context.dataStore.data.first()
    return preferences[preferencesKey]
}

// Escritura de datos
suspend fun writeString(context: Context, key: String, value: String) {
    val preferencesKey = stringPreferencesKey(key)
    context.dataStore.edit { settings ->
        settings[preferencesKey] = value
    }
}

Ejemplo de uso de KSP para crear acceso seguro en tipos:

// En build.gradle (:app) añade el plugin
plugins {
 ...
 id("com.google.devtools.ksp") version "1.7.21-1.0.8" // Versión de ejemplo, verifica la actual
}

// En build.gradle (:app) añade dependencias
dependencies {
 ...
 implementation("androidx.datastore:datastore-preferences:1.0.0") // Verifica la versión actual
 implementation("androidx.datastore:datastore-preferences-core:1.0.0") // Verifica la versión actual
 ksp("androidx.datastore:datastore-preferences-core:1.0.0") // Verifica la versión actual
}

// Definición de interfaz para KSP
interface SettingsPref {
    val appName: String
    val isNotificationsEnabled: Boolean
    val theme: Int
}

// Generación de implementación con KSP
// Creará una clase tipo SettingsPrefImpl, que puede usarse para acceder a los datos

DataStore Preferences es la forma recomendada de almacenar configuraciones y datos simples en Android, reemplazando a SharedPreferences obsoleto.