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.