Sobes.tech
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.