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.