Sobes.tech
Middle

DataStore Preferences ile çalıştınız mı?

sobes.tech yapay zeka

AI'dan gelen yanıt

Evet, Jetpack DataStore Preferences ile çalıştım.

Bu, SharedPreferences'e kıyasla küçük veri hacimlerini depolamak için daha modern ve daha güvenli bir yoldur. Kotlin Coroutines ve Flow tabanlıdır, bu da onu asenkron, hata toleranslı ve thread-safe yapar.

DataStore Preferences'in temel avantajları:

  • Asenkronluk: Okuma ve yazma işlemleri asenkron olarak gerçekleştirilir, ana akışı engellemez.
  • Güvenlik: Atomik güncelleme işlemlerini destekler, veri bozulmasını önler.
  • Thread güvenliği: Çok iş parçacıklı ortamlarda güvenlidir.
  • Flow desteği: Gerçek zamanlı veri güncellemeleri almak için Flow kullanımı.
  • Sıkı tipleme: Preferences.Key kullanarak farklı veri tiplerini destekler.

Kullanım örneği:

DataStore oluşturma:

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

Veri anahtarları oluşturma:

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

Veri okuma:

// ExampleUsage.kt
// Flow ile değer okuma
scope.launch {
    context.dataStore.data
        .map { preferences ->
            // Anahtar ile değeri al, varsayılan değeri sağla
            preferences[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
        }
        .collect { counter ->
            // Alınan değeri işle
            println("Counter: $counter")
        }
}

// first() kullanarak mevcut değeri okuma
scope.launch {
    val counter = context.dataStore.data.first()[PreferencesKeys.EXAMPLE_COUNTER] ?: 0
    println("Mevcut sayaç: $counter")
}

Veri yazma:

// ExampleUsage.kt
scope.launch {
    context.dataStore.edit { settings ->
        // Anahtar ile değeri güncelle
        settings[PreferencesKeys.EXAMPLE_COUNTER] = (settings[PreferencesKeys.EXAMPLE_COUNTER] ?: 0) + 1
        settings[PreferencesKeys.EXAMPLE_TEXT] = "Yeni metin değeri"
    }
}

DataStore Preferences, kullanıcı ayarları, özellik bayrakları ve benzeri bilgilerin saklanması için uygundur; karmaşık veri yapıları veya ilişkisel bağlantılar gerekmediğinde kullanılır. Daha karmaşık senaryolar için DataStore Proto veya Room'u düşünürdüm.