Middle
Դուք աշխատե՞լ եք DataStore Preferences-ով։
sobes.tech AI
Պատասխան AI-ից
Այո, ես աշխատել եմ Jetpack DataStore Preferences-ով:
Սա ժամանակակից և ավելի անվտանգ միջոց է փոքր տվյալների պահեստավորման համար համեմատած SharedPreferences-ով: Այն հիմնված է Kotlin Coroutines և Flow-ով, ինչը դարձնում է այն ասինխրոն, խոցելի սխալների նկատմամբ և բազմատ/thread անվտանգ:
Հիմնական առավելությունները DataStore Preferences-ի:
- Ասինխրոնություն: Կարդալու և գրելու գործողությունները կատարվում են ասինխրոն, առանց գլխավոր հոսքը խափանելու:
- Անվտանգություն: Աջակցում է ատոմային թարմացումների, կանխելով տվյալների վնասումը:
- Բազմատ/thread անվտանգություն: Բազմատ/thread միջավայրում անվտանգ է օգտագործելու համար:
- 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։