DataStore Preferences ilə işlədinizmi?
sobes.tech Süni İntellekt
AI-dan cavab
Bəli, mən Jetpack DataStore Preferences ilə işləyibəm.
Bu, SharedPreferences ilə müqayisədə kiçik həcmli məlumatların saxlanması üçün müasir və daha təhlükəsiz yoldur. Kotlin Coroutines və Flow əsasında qurulmuşdur, bu da onu asinxron, uğursuzluqlara davamlı və ipliklərarası təhlükəsiz edir.
DataStore Preferences-in əsas üstünlükləri:
- Asinxron: Oxuma və yazma əməliyyatları asinxron həyata keçirilir, əsas ipi bloklamır.
- Təhlükəsizlik: Atomik yeniləmə əməliyyatlarını dəstəkləyir, məlumatların pozulmasının qarşısını alır.
- İplik təhlükəsizliyi: Çox iplikli mühitdə təhlükəsiz istifadə edilə bilər.
- Flow dəstəyi: Data yeniləmələrini real vaxtda almaq üçün Flow istifadə olunur.
- Qəti tipli:
Preferences.Keyvasitəsilə müxtəlif məlumat tiplərini dəstəkləyir.
İstifadə nümunəsi:
DataStore yaradılması:
// preferences_datastore.kt
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
Məlumatların saxlanması üçün açarların yaradılması:
// PreferencesKeys.kt
object PreferencesKeys {
val EXAMPLE_COUNTER = intPreferencesKey("example_counter")
val EXAMPLE_TEXT = stringPreferencesKey("example_text")
val EXAMPLE_BOOLEAN = booleanPreferencesKey("example_boolean")
}
Məlumatların oxunması:
// ExampleUsage.kt
// Flow ilə dəyər oxuma
scope.launch {
context.dataStore.data
.map { preferences ->
// Açar ilə dəyəri əldə et, defolt dəyər ver
preferences[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
}
.collect { counter ->
// Alınan dəyəri emal et
println("Counter: $counter")
}
}
// Mövcud dəyəri first() ilə oxuma
scope.launch {
val counter = context.dataStore.data.first()[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
println("Cari sayğac: $counter")
}
Dəyərlərin yazılması:
// ExampleUsage.kt
scope.launch {
context.dataStore.edit { settings ->
// Açar ilə dəyəri yenilə
settings[PreferencesKeys.EXAMPLE_COUNTER] = (settings[PreferencesKeys.EXAMPLE_COUNTER] ?: 0) + 1
settings[PreferencesKeys.EXAMPLE_TEXT] = "Yeni mətn dəyəri"
}
}
DataStore Preferences istifadəçi parametrlərinin, funksiyaların bayraqlarının və digər oxşar məlumatların saxlanması üçün uyğundur, burada mürəkkəb məlumat strukturu və ya əlaqələr tələb olunmur. Daha mürəkkəb ssenarilər üçün DataStore Proto və ya Room-u nəzərdən keçirərdim.