Sobes.tech
Middle

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.Key vasitə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.