SharedPreferences vs DataStore: Android'de Veri Kalıcılığı
Android'de küçük verileri (kullanıcı tercihleri, token, basit ayarlar) depolamak için SharedPreferences uzun yıllar standart çözüm olmuş. Ancak Google, 2020'den itibaren DataStore'u önermeye başladı. İkisi de yerel veri tutsa da mimarı, güvenliği ve kullanım şekli farklı.
SharedPreferences XML tabanlı, anahtar-değer çiftlerini depolayan eski bir sistemdir. Kullanımı basit, fakat thread-safe değildir ve büyük verilerle sorun yaşar. Veri şifreli olmadan kaydedilir.
DataStore, SharedPreferences yerine Google tarafından önerilen modern çözümdür. Kotlin Coroutines ve Flow kullanır, asenkron işleme destekler, daha güvenlidir ve ACID işlemleri sağlar.
SharedPreferences ile veri kaydetme:
1val sharedPref = context.getSharedPreferences("app_prefs", Context.MODE_PRIVATE)2sharedPref.edit().putString("username", "ahmet").apply()3val username = sharedPref.getString("username", "")4// Çıktı: "ahmet"Gördüğün gibi senkron ve basit. Ancak UI thread'i bloke edebilir.
DataStore ile veri kaydetme (Preferences DataStore):
Önce build.gradle'a ekle:
1dependencies {2implementation "androidx.datastore:datastore-preferences:1.0.0"3}Sonra kullan:
1val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "app_prefs")23// Veri yazma4suspend fun saveUsername(context: Context, username: String) {5context.dataStore.edit { preferences ->6preferences[stringPreferencesKey("username")] = username7}8}910// Veri okuma11fun getUsername(context: Context): Flow<String> = context.dataStore.data.map { preferences ->12preferences[stringPreferencesKey("username")]?: ""13}1415// Kullanım16LifecycleScope.launch {17saveUsername(context, "ahmet")18getUsername(context).collect { username ->19println("Kullanıcı: $username")20// Çıktı: "Kullanıcı: ahmet"21}22}DataStore asenkron çalışır, UI donmaz.
SharedPreferences: Eski projeler, basit string-boolean depolama, hızlı prototip.
DataStore: Yeni projeler, Kotlin-first uygulamalar, asenkron iş akışı, daha güvenli veri tutma.
Google resmi olarak SharedPreferences'ı deprecated etmedi ama DataStore'a geçişi öneriye başladı. Eğer yeni bir proje yazıyorsan DataStore tercih et; mevcut projede acele yok ama zamanla geçiş düşün.
0 yorum