Junior
Ai lucrat cu DataStore Preferences pe Android?
sobes.tech AI
Răspuns de la AI
Da, am lucrat.
Preferences DataStore este un echivalent asincron al SharedPreferences, inclus în AndroidX DataStore. Permite stocarea sigură a perechilor cheie-valoare simple, folosind KSP pe Kotlin Flow sau RxJava3 pentru lucru asincron și Protobuf/Proto DataStore sau Proto DataStore pentru tipuri de date.
Principalele avantaje ale Preferences DataStore comparativ cu SharedPreferences:
- Asincron: Funcționează cu Flow sau RxJava3, prevenind blocarea thread-ului principal și evitând problemele de ANR.
- Siguranță: Operațiile atomice de citire/scriere garantează coerența datelor.
- Siguranță de tip: Cu Protobuf DataStore se poate defini un schemă de date, evitând erorile la lucrul cu tipurile.
- Reactivitate: Permite monitorizarea modificărilor datelor în timp real.
Exemplu de utilizare a Preferences DataStore cu Kotlin Flow:
// Crearea DataStore
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
// Citirea datelor
suspend fun readString(context: Context, key: String): String? {
val preferencesKey = stringPreferencesKey(key)
val preferences = context.dataStore.data.first()
return preferences[preferencesKey]
}
// Scrierea datelor
suspend fun writeString(context: Context, key: String, value: String) {
val preferencesKey = stringPreferencesKey(key)
context.dataStore.edit { settings ->
settings[preferencesKey] = value
}
}
Exemplu de utilizare a KSP pentru crearea accesului sigur de tip:
// În build.gradle (:app) adaugă plugin-ul
plugins {
...
id("com.google.devtools.ksp") version "1.7.21-1.0.8" // Versiune exemplu, verifică versiunea actuală
}
// În build.gradle (:app) adaugă dependențe
dependencies {
...
implementation("androidx.datastore:datastore-preferences:1.0.0") // Verifică versiunea actuală
implementation("androidx.datastore:datastore-preferences-core:1.0.0") // Verifică versiunea actuală
ksp("androidx.datastore:datastore-preferences-core:1.0.0") // Verifică versiunea actuală
}
// Definirea interfeței pentru KSP
interface SettingsPref {
val appName: String
val isNotificationsEnabled: Boolean
val theme: Int
}
// Generarea implementării cu KSP
// Va crea o clasă de tip SettingsPrefImpl, care poate fi folosită pentru accesarea datelor
Preferences DataStore reprezintă metoda recomandată pentru stocarea setărilor și datelor simple în Android, înlocuind SharedPreferences învechit.