Middle
Ați lucrat cu DataStore Preferences?
sobes.tech AI
Răspuns de la AI
Da, am lucrat cu Jetpack DataStore Preferences.
Este o metodă modernă și mai sigură de a stoca volume mici de date comparativ cu SharedPreferences. Este bazată pe Kotlin Coroutines și Flow, ceea ce o face asincronă, rezistentă la erori și sigură pentru fire.
Principalele avantaje ale DataStore Preferences:
- Asincron: Operațiile de citire și scriere se realizează asincron, fără a bloca firul principal.
- Siguranță: Suportă operații atomice de actualizare, prevenind corupția datelor.
- Siguranță pentru fire: Sigur pentru utilizare în medii multi-thread.
- Suport Flow: Utilizarea Flow pentru a primi actualizări în timp real ale datelor.
- Tipare stricte: Suportă diferite tipuri de date folosind
Preferences.Key.
Exemplu de utilizare:
Crearea DataStore:
// preferences_datastore.kt
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
Crearea cheilor pentru stocarea datelor:
// PreferencesKeys.kt
object PreferencesKeys {
val EXAMPLE_COUNTER = intPreferencesKey("example_counter")
val EXAMPLE_TEXT = stringPreferencesKey("example_text")
val EXAMPLE_BOOLEAN = booleanPreferencesKey("example_boolean")
}
Citirea datelor:
// ExampleUsage.kt
// Citirea valorii cu Flow
scope.launch {
context.dataStore.data
.map { preferences ->
// Obține valoarea după cheie, oferind o valoare implicită
preferences[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
}
.collect { counter ->
// Procesarea valorii primite
println("Counter: $counter")
}
}
// Citirea valorii curente cu first()
scope.launch {
val counter = context.dataStore.data.first()[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
println("Contor curent: $counter")
}
Scrierea datelor:
// ExampleUsage.kt
scope.launch {
context.dataStore.edit { settings ->
// Actualizarea valorii după cheie
settings[PreferencesKeys.EXAMPLE_COUNTER] = (settings[PreferencesKeys.EXAMPLE_COUNTER] ?: 0) + 1
settings[PreferencesKeys.EXAMPLE_TEXT] = "Valoare text nouă"
}
}
DataStore Preferences este potrivit pentru stocarea setărilor utilizatorului, a steagurilor de funcții și a altor informații similare, unde nu este necesară o structură de date complexă sau relații. Pentru scenarii mai complexe, aș considera DataStore Proto sau Room.