Sobes.tech
Middle

Vai esat strādājis ar DataStore Preferences?

sobes.tech AI

Atbilde no AI

Jā, es strādāju ar Jetpack DataStore Preferences.

Tas ir mūsdienīgāks un drošāks veids, kā glabāt nelielu datu apjomu, salīdzinot ar SharedPreferences. Tas balstās uz Kotlin Coroutines un Flow, padarot to asinhronu, kļūdām izturīgu un drošu daudzvirzienu vidē.

Galvenās DataStore Preferences priekšrocības:

  • Asinhronitāte: Lasīšanas un rakstīšanas operācijas tiek veiktas asinhroni, neapturot galveno plūsmu.
  • Drošība: Atbalsta atomu atjaunināšanas operācijas, novēršot datu bojāšanu.
  • Daudzvirzienu drošība: Droši lietot daudzvirzienu vidē.
  • Flow atbalsts: Izmanto Flow, lai saņemtu datu atjauninājumus reāllaikā.
  • ** stingra tipizācija:** Atbalsta dažādus datu tipus ar Preferences.Key palīdzību.

Piemērs lietošanai:

Izveidojam DataStore:

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

Izveidojam datu glabāšanas atslēgas:

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

Datu lasīšana:

// ExampleUsage.kt
// Lasīt vērtību ar Flow
scope.launch {
    context.dataStore.data
        .map { preferences ->
            // Saņemt vērtību pēc atslēgas, ar noklusējuma vērtību
            preferences[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
        }
        .collect { counter ->
            // Apstrādāt saņemto vērtību
            println("Counter: $counter")
        }
}

// Lasīt pašreizējo vērtību ar first()
scope.launch {
    val counter = context.dataStore.data.first()[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
    println("Current counter: $counter")
}

Datu rakstīšana:

// ExampleUsage.kt
scope.launch {
    context.dataStore.edit { settings ->
        // Atjaunināt vērtību pēc atslēgas
        settings[PreferencesKeys.EXAMPLE_COUNTER] = (settings[PreferencesKeys.EXAMPLE_COUNTER] ?: 0) + 1
        settings[PreferencesKeys.EXAMPLE_TEXT] = "New text value"
    }
}

DataStore Preferences ir lieliski piemērots lietotāja iestatījumu, karogu un citu līdzīgu datu glabāšanai, kur nav nepieciešama sarežģīta datu struktūra vai relāciju saites. Sarežģītākiem scenārijiem es apsvērtu DataStore Proto vai Room.