Sobes.tech
Middle

Kas olete töötanud DataStore Preferences'iga?

sobes.tech AI

Vastus AI-lt

Jah, ma olen töötanud Jetpack DataStore Preferences'iga.

See on kaasaegsem ja turvalisem viis väikeste andmekoguste salvestamiseks võrreldes SharedPreferences'iga. See põhineb Kotlin Coroutines ja Flow'le, muutes selle asünkroonseks, vigadele vastupidavaks ja mitme-kihtse turvaliseks.

DataStore Preferences'i peamised eelised:

  • Asünkroonsus: Lugemis- ja kirjutamisoperatsioonid toimuvad asünkroonselt, takistamata peamist voogu.
  • Turvalisus: Toetab atomseid uuenduste operatsioone, vältides andmete rikkumist.
  • Mitme-kihtne turvalisus: On ohutu kasutada mitme-kihtses keskkonnas.
  • Flow tugi: Kasutatakse Flow andmete reaalajas uuendamiseks.
  • Range tüübitamine: Toetab erinevaid andmetüüpe Preferences.Key abil.

Näide kasutamisest:

Loo DataStore:

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

Loo andmete salvestamise võtmed:

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

Andmete lugemine:

// ExampleUsage.kt
// Väärtuse lugemine Flow abil
scope.launch {
    context.dataStore.data
        .map { preferences ->
            // Väärtuse saamine võtme järgi, vaikimisi väärtusega
            preferences[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
        }
        .collect { counter ->
            // Saadud väärtuse töötlemine
            println("Counter: $counter")
        }
}

// Praeguse väärtuse lugemine first() abil
scope.launch {
    val counter = context.dataStore.data.first()[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
    println("Current counter: $counter")
}

Andmete kirjutamine:

// ExampleUsage.kt
scope.launch {
    context.dataStore.edit { settings ->
        // Väärtuse uuendamine võtme järgi
        settings[PreferencesKeys.EXAMPLE_COUNTER] = (settings[PreferencesKeys.EXAMPLE_COUNTER] ?: 0) + 1
        settings[PreferencesKeys.EXAMPLE_TEXT] = "New text value"
    }
}

DataStore Preferences sobib suurepäraselt kasutaja seadete, lippude ja muu sarnase teabe salvestamiseks, kus ei ole vaja keerulist andmestruktuuri või seoseid. Keerulisemate stsenaariumide jaoks kaaluksin DataStore Proto või Room kasutamist.