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.