Sobes.tech
Middle

Pracovali ste s DataStore Preferences?

sobes.tech AI

Odpoveď od AI

Áno, pracoval som s Jetpack DataStore Preferences.

Je to moderný a bezpečnejší spôsob ukladania malých objemov dát v porovnaní so SharedPreferences. Je založený na Kotlin Coroutines a Flow, čo ho robí asynchrónnym, odolným voči chybám a bezpečným pre viacvláknové prostredie.

Hlavné výhody DataStore Preferences:

  • Asynchrónnosť: Operácie čítania a zápisu sa vykonávajú asynchrónne, neblokujúc hlavný vlákno.
  • Bezpečnosť: Podporuje atómové operácie aktualizácie, čím zabraňuje poškodeniu dát.
  • Práca s vláknami: Bezpečné pre použitie v viacvláknovom prostredí.
  • Podpora Flow: Použitie Flow na získavanie aktualizácií dát v reálnom čase.
  • Prísna typizácia: Podporuje rôzne typy dát pomocou Preferences.Key.

Príklad použitia:

Vytvoríme DataStore:

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

Vytvoríme kľúče na ukladanie dát:

// PreferencesKeys.kt
object PreferencesKeys {
    val EXAMPLE_COUNTER = intPreferencesKey("example_counter")
    val EXAMPLE_TEXT = stringPreferencesKey("example_text")
    val EXAMPLE_BOOLEAN = booleanPreferencesKey("example_boolean")
}

Čítanie dát:

// ExampleUsage.kt
// Čítanie hodnoty pomocou Flow
scope.launch {
    context.dataStore.data
        .map { preferences ->
            // Získanie hodnoty podľa kľúča, s predvolenou hodnotou
            preferences[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
        }
        .collect { counter ->
            // Spracovanie získanej hodnoty
            println("Counter: $counter")
        }
}

// Čítanie aktuálnej hodnoty pomocou first()
scope.launch {
    val counter = context.dataStore.data.first()[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
    println("Current counter: $counter")
}

Zápis dát:

// ExampleUsage.kt
scope.launch {
    context.dataStore.edit { settings ->
        // Aktualizácia hodnoty podľa kľúča
        settings[PreferencesKeys.EXAMPLE_COUNTER] = (settings[PreferencesKeys.EXAMPLE_COUNTER] ?: 0) + 1
        settings[PreferencesKeys.EXAMPLE_TEXT] = "New text value"
    }
}

DataStore Preferences je vhodný na ukladanie používateľských nastavení, vlajok funkcií a iných podobných informácií, kde nie je potrebná zložitá štruktúra dát alebo relačné väzby. Pre zložitejšie scenáre by som zvážil DataStore Proto alebo Room.