Sobes.tech
Junior

Hai lavorato con DataStore Preferences su Android?

sobes.tech AI

Risposta dell'AI

Sì, ho lavorato.

Preferences di DataStore è un equivalente asincrono di SharedPreferences, incluso in AndroidX DataStore. Permette di memorizzare in modo sicuro coppie chiave-valore semplici, usando KSP su Kotlin Flow o RxJava3 per il lavoro asincrono e Protobuf/Proto DataStore o Proto DataStore per i tipi di dati.

Vantaggi principali di DataStore Preferences rispetto a SharedPreferences:

  • Asincronia: Funziona con Flow o RxJava3, prevenendo blocchi sul thread principale ed evitando problemi di ANR.
  • Sicurezza: Operazioni atomiche di lettura/scrittura garantiscono la coerenza dei dati.
  • Sicurezza di tipo: Con Protobuf DataStore si può definire uno schema di dati, evitando errori di tipo.
  • Reattività: Permette di monitorare le modifiche ai dati in tempo reale.

Esempio di utilizzo di DataStore Preferences con Kotlin Flow:

// Creazione di DataStore
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")

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

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

Esempio di utilizzo di KSP per creare accesso sicuro di tipo:

// In build.gradle (:app) aggiungi il plugin
plugins {
 ...
 id("com.google.devtools.ksp") version "1.7.21-1.0.8" // Versione di esempio, verifica quella attuale
}

// In build.gradle (:app) aggiungi dipendenze
dependencies {
 ...
 implementation("androidx.datastore:datastore-preferences:1.0.0") // Verifica la versione attuale
 implementation("androidx.datastore:datastore-preferences-core:1.0.0") // Verifica la versione attuale
 ksp("androidx.datastore:datastore-preferences-core:1.0.0") // Verifica la versione attuale
}

// Definizione dell'interfaccia per KSP
interface SettingsPref {
    val appName: String
    val isNotificationsEnabled: Boolean
    val theme: Int
}

// Generazione di implementazione con KSP
// Creerà una classe di tipo SettingsPrefImpl, che può essere usata per accedere ai dati

DataStore Preferences è il metodo raccomandato per memorizzare impostazioni e dati semplici in Android, sostituendo SharedPreferences obsoleto.