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.Keykullanarak 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.