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-ро баррасӣ мекардам.