Sobes.tech
Middle

DataStore Preferences менен иштедиңизби?

sobes.tech AI

AIден жооп

Ооба, мен Jetpack DataStore Preferences менен иштедим.

Бул заманбап жана коопсузраак ыкма сактоо үчүн кичинекей маалыматтардын салыштырмалуу SharedPreferencesке караганда. Ал Kotlin Coroutines жана Flow негизделген, бул аны асинхрондуу, каталарга туруктуу жана көптөптүк коопсуз кылат.

DataStore Preferencesтин негизги артыкчылыктары:

  • Асинхрондук: Окуу жана жазуу операциялары асинхрондуу жүргүзүлөт, негизги агымды блоктебестен.
  • Коопсуздук: Атомардык жаңыртуу операцияларын колдойт, маалыматтын бузулушун алдын алат.
  • Көптөптүккө коопсуздук: Көптөптүк чөйрөдө колдонууга коопсуз.
  • Flow колдоо: Реал убакытта маалымат жаңыртууларын алуу үчүн Flow колдонуу.
  • Катуу түрдө типтөө: Preferences.Key аркылуу ар кандай маалымат түрлөрүн колдойт.

Колдонуу мисалы:

DataStore түзүү:

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

Маалымат сактоо ачкычтарын түзүү:

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

Маалыматты окуу:

// ExampleUsage.kt
// Flow аркылуу маанини окуу
scope.launch {
    context.dataStore.data
        .map { preferences ->
            // Ачкыч боюнча маанини алуу, алдын ала мааниге ээ болуу менен
            preferences[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
        }
        .collect { counter ->
            // Алынган маанини иштетүү
            println("Counter: $counter")
        }
}

// first() колдонуп учурдагы маанини окуу
scope.launch {
    val counter = context.dataStore.data.first()[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
    println("Current counter: $counter")
}

Маалыматты жазуу:

// ExampleUsage.kt
scope.launch {
    context.dataStore.edit { settings ->
        // Ачкыч боюнча маанини жаңыртуу
        settings[PreferencesKeys.EXAMPLE_COUNTER] = (settings[PreferencesKeys.EXAMPLE_COUNTER] ?: 0) + 1
        settings[PreferencesKeys.EXAMPLE_TEXT] = "New text value"
    }
}

DataStore Preferences колдонуучу жөндөөлөрүн, функция белгилерин жана башка окшош маалыматтарды сактоо үчүн ылайыктуу, анда татаал структура же реляцион байланышы талап кылынбайт. Көчмө сценарийлер үчүн мен DataStore Proto же Room карап чыгам.