Sobes.tech
Middle

Pracoval jste s DataStore Preferences?

sobes.tech AI

Odpověď od AI

Ano, pracoval jsem s Jetpack DataStore Preferences.

Je to modernější a bezpečnější způsob ukládání malých objemů dat ve srovnání se SharedPreferences. Je založen na Kotlin Coroutines a Flow, což ho činí asynchronním, odolným vůči chybám a bezpečným pro vlákna.

Hlavní výhody DataStore Preferences:

  • Asynchronní: Operace čtení a zápisu jsou prováděny asynchronně, aniž by blokovaly hlavní vlákno.
  • Bezpečnost: Podporuje atomické operace aktualizace, čímž zabraňuje poškození dat.
  • Bezpečnost pro vlákna: Bezpečné pro použití v prostředí s více vlákny.
  • Podpora Flow: Použití Flow pro získávání aktualizací dat v reálném čase.
  • Přísné typování: Podporuje různé typy dat pomocí Preferences.Key.

Příklad použití:

Vytvoření DataStore:

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

Vytvoření klíčů pro ukládání dat:

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

Čtení dat:

// ExampleUsage.kt
// Čtení hodnoty pomocí Flow
scope.launch {
    context.dataStore.data
        .map { preferences ->
            // Získání hodnoty podle klíče, s výchozí hodnotou
            preferences[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
        }
        .collect { counter ->
            // Zpracování získané hodnoty
            println("Counter: $counter")
        }
}

// Čtení aktuální hodnoty pomocí first()
scope.launch {
    val counter = context.dataStore.data.first()[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
    println("Aktuální čítač: $counter")
}

Zápis dat:

// ExampleUsage.kt
scope.launch {
    context.dataStore.edit { settings ->
        // Aktualizace hodnoty podle klíče
        settings[PreferencesKeys.EXAMPLE_COUNTER] = (settings[PreferencesKeys.EXAMPLE_COUNTER] ?: 0) + 1
        settings[PreferencesKeys.EXAMPLE_TEXT] = "Nová textová hodnota"
    }
}

DataStore Preferences je vhodný pro ukládání uživatelských nastavení, vlajek funkcí a podobných informací, kde není potřeba složitá datová struktura nebo relace. Pro složitější scénáře bych zvažoval DataStore Proto nebo Room.