Sobes.tech
Middle

Android uygulamasında veri önbellekleme mekanizması nasıl uygulanır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Android'de önbellekleme mekanizması, veri türüne ve yaşam döngüsüne bağlı olarak en uygun olanı seçilerek birkaç farklı şekilde uygulanabilir.

Ana yaklaşımlar:

  • Dahili Depolama (Internal Storage): Hassas veriler için uygundur, yalnızca uygulama tarafından erişilebilir. Veriler, uygulamaya özel bir dizinde saklanır.
  • Harici Depolama (External Storage): Daha az hassas veriler için kullanılır, diğer uygulamalar veya kullanıcılar tarafından okunabilir. İzinler gerektirir.
  • Paylaşılan Tercihler (Shared Preferences): Uygulama ayarları gibi küçük ve basit "anahtar-değer" verilerini saklamak için idealdir.
  • SQLite Veritabanları: Yapılandırılmış veriler için güçlü bir çözümdür, karmaşık sorgular yapmaya olanak tanır. Android, SQLite desteği sağlar.
  • Önbellek Klasörü: Özellikle geçici veriler için tasarlanmıştır. Sistem, alan açmak gerekirse bu dosyaları silebilir.

Dahili depolama kullanarak önbellekleme örneği:

// Önbellek dosyasını al
val cacheFile = File(context.cacheDir, "my_cached_data.txt")

// Verileri önbelleğe yaz
try {
    FileOutputStream(cacheFile).use { fos ->
        fos.write("Önbelleğe alınacak veriler".toByteArray())
    }
} catch (e: IOException) {
    // Hata işleme
}

// Önbellekten verileri oku
try {
    FileInputStream(cacheFile).use { fis ->
        val data = fis.readBytes().toString(Charsets.UTF_8)
        // Önbellekteki verileri kullan
    }
} catch (e: IOException) {
    // Hata işleme, belki önbellek boş veya erişilemez
}

// Önbellek dosyasını sil
cacheFile.delete()

Shared Preferences kullanımı örneği:

// Shared Preferences örneği al
val sharedPref = context.getSharedPreferences("my_cache_prefs", Context.MODE_PRIVATE)

// Veri yaz
with(sharedPref.edit()) {
    putString("cached_key", "cached_value")
    apply()
}

// Veri oku
val cachedValue = sharedPref.getString("cached_key", null)
// cachedValue kullan

// Veriyi sil
with(sharedPref.edit()) {
    remove("cached_key")
    apply()
}

SQLite ile çalışmak için genellikle Room gibi sarmalayıcı kütüphaneler kullanılır, bu kütüphaneler Android Mimari Bileşenleri'nin bir parçasıdır.

// Room kullanımı örneği: varlık tanımı
@Entity(tableName = "users")
data class User(
    @PrimaryKey val id: Int,
    val name: String,
    val age: Int?
)

Önbellekleme stratejileri:

  • Cache-Aside: Uygulama önce önbelleği kontrol eder. Veriler bulunursa kullanılır. Bulunmazsa, veriler kaynaktan (örneğin, ağ) yüklenir ve sonra gelecekteki sorgular için önbelleğe alınır.
  • Read-Through: Kütüphane veya çerçeve (örneğin, ağ istekleri için OkHttp) otomatik olarak önbelleği yönetir. Veri talep edildiğinde, kütüphane önbelleği kontrol eder ve veriler yoksa veya güncel değilse, kaynaktan yükler ve önbelleği günceller.
  • Write-Through: Veriler önce önbelleğe yazılır ve sonra ana kaynağa aynı anda yazılır.
  • Write-Back: Veriler önce sadece önbelleğe yazılır. Değişiklikler daha sonra ana kaynağa (örneğin, veritabanı) aktarılır, muhtemelen önbelleği doldururken veya zamanlamaya göre.

Strateji ve önbellekleme yönteminin seçimi, verilerin güncellik gereksinimleri, performans ve depolanan veri hacmine bağlıdır. Ayrıca, önbellekteki verilerin güncelliğini sağlamak için TTL (Time To Live) dikkate alınmalıdır.