0Pricing
Android Academy · Ders

DataStore ve SharedPreferences

DataStore'un neden modern tercih olduğunu öğrenin.

DataStore ve SharedPreferences, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 4 dersten oluşur.

Küçük Ayarları Saklama

Neredeyse her uygulamanın küçük veri parçalarını hatırlaması gerekir: karanlık mod düğmesi, son kullanılan sekme veya kullanıcı adı gibi. Bunlar büyük ilişkisel veriler değil, anahtar-değer tercihleridir.

Android'de bunun için yıllarca SharedPreferences kullanıldı. Günümüzde önerilen çözüm DataStore'dur.

SharedPreferences Nedir?

SharedPreferences, XML tabanlı basit bir anahtar-değer deposudur. Bir düzenleyici alır, değerleri ekler ve kaydedersiniz.

  • Kullanımı kolaydır
  • Çerçeveye yerleşiktir
  • Kullanıcı arayüzü iş parçacığını engelleyebilen eşzamanlı bir API sunar
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
prefs.edit().putBoolean("dark_mode", true).apply()
val dark = prefs.getBoolean("dark_mode", false)

SharedPreferences'ın Sorunları

SharedPreferences'ın önemli eksiklikleri vardır:

  • getX() okumaları çağıran iş parçacığını (çoğunlukla ana iş parçacığını) engelleyebilir
  • commit(), disk G/Ç işlemlerini eşzamanlı olarak gerçekleştirir
  • Hataları bildirmek için yerleşik bir yöntem yoktur
  • API tür güvenli değildir ve tepkisel çalışmaz

DataStore'a Geçiş

DataStore, Kotlin coroutines ve Flow üzerine kurulmuş modern alternatiftir. Tüm disk işlemlerini ana iş parçacığının dışında gerçekleştirir ve verileri gözlemlenebilir bir akış olarak sunar.

İki çeşidi vardır: Preferences DataStore (anahtar-değer) ve Proto DataStore (tür belirtilmiş nesneler).

Tasarım Gereği Eşzamansız

DataStore kullanıcı arayüzünü hiçbir zaman engellemez. Okumalar topladığınız bir Flow üzerinden gelir; yazmalar ise bir eş yordamdan çağırdığınız suspend işlevleridir.

Böylece ağır işlemler arka plan dağıtıcısında gerçekleştiği için ayarları ana iş parçacığında bile güvenle okuyup yazabilirsiniz.

val darkMode: Flow<Boolean> = dataStore.data
    .map { prefs -> prefs[DARK_MODE_KEY] ?: false }

Tepkisel Güncellemeler

DataStore bir Flow sunduğundan, bir değer değiştiğinde kullanıcı arayüzünüz otomatik olarak güncellenir. SharedPreferences ile kullanışsız bir değişiklik dinleyicisi kaydetmeniz gerekirdi.

Jetpack Compose'ta akış üzerinde yalnızca collectAsState() kullanmanız yeterlidir; ekran her güncellemede yeniden oluşturulur.

İşlemsel ve Tutarlı

DataStore yazma işlemleri işlemseldir. Bir güncelleme ya tamamen başarılı olur ya da tamamen başarısız olur; bu nedenle hiçbir zaman yarım yazılmış bir değer okuyamazsınız.

Ayrıca aynı işlem içindeki birden çok okuma ve yazma arasında veri tutarlılığını garanti eder.

Hata Yönetimi

SharedPreferences G/Ç sorunlarını sessizce yok sayar. DataStore ise bunları bildirir: Bir okuma, akış üzerinden IOException gönderebilir; siz de bunu catch ile yakalayıp kurtarma işlemi gerçekleştirebilirsiniz.

val settings: Flow<Settings> = dataStore.data
    .catch { e ->
        if (e is IOException) emit(emptyPreferences())
        else throw e
    }
    .map { /* map to your model */ }

DataStore Ne Zaman Uygun Değildir?

DataStore, küçük veya orta boyutlu anahtar-değer ya da tür belirtilmiş veriler içindir. Bir veritabanı değildir.

  • Büyük veri kümeleri, sorgular ve ilişkiler: Room kullanın
  • Dosyalar, görseller ve medya: dosya sistemini kullanın
  • Az sayıda ayar: DataStore kullanın

Bağımlılığı Ekleme

Preferences DataStore'u kullanmak için yapıyı modülünüzün Gradle dosyasına ekleyin. Proto DataStore için ayrı bir yapı bulunur.

dependencies {
    implementation("androidx.datastore:datastore-preferences:1.1.1")
}

SharedPreferences'tan Geçiş

Her şeyi bir kerede yeniden yazmanız gerekmez. DataStore, mevcut değerleri ilk okuma sırasında otomatik olarak kopyalamak için SharedPreferencesMigration sağlar.

val Context.dataStore by preferencesDataStore(
    name = "settings",
    produceMigrations = { context ->
        listOf(SharedPreferencesMigration(context, "settings"))
    }
)

Hızlı Kontrol

DataStore'un neden tercih edildiğini anlayıp anlamadığınızı test edin.

Özet

Anahtar-değer ayarları için DataStore'un neden modern tercih olduğunu öğrendiniz:

  • SharedPreferences ana iş parçacığını engelleyebilir ve reaktif değildir
  • DataStore güvenli eşzamansız erişim için eş yordamları ve Flow kullanır
  • Yazma işlemleri, uygun hata işleme ile işlemseldir
  • İki tür bulunur: Preferences ve Proto

Sırada preferencesDataStore temsilcisini uygulamada kullanacaksınız.

Sıkça Sorulan Sorular

“DataStore ve SharedPreferences” dersi ücretsiz mi?

Evet — “DataStore ve SharedPreferences” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 4 dersten oluşur.

“DataStore ve SharedPreferences” dersinde ne öğreneceğim?

DataStore'un neden modern tercih olduğunu öğrenin. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Android Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“DataStore ve SharedPreferences” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. DataStore ve SharedPreferences
  2. Preferences DataStore
  3. Ayarları Okuma ve Yazma
  4. Proto DataStore
← Android Academy Sayfasına Dön