🍪Android’de Önbelleğe Alma İşlemi(Caching)
Giriş
Android uygulama performansını ve veri alışverişini optimize etmek, günümüz geliştiricileri için önemli bir önceliktir. Bu bağlamda, önbelleğe alma (caching) teknikleri, özellikle ağ istekleri ve veri çekme süreçlerinde, uygulama verimliliğini artırmak için vazgeçilmez bir araçtır. Bu makalede, Kotlin programlama dilini kullanarak Android uygulamasında önbelleğe alma işlemlerini adım adım anlatacağız. Özellikle API isteklerinden gelen verileri önbelleğe alma odak noktamız olacak. Şimdi, bu süreci daha yakından inceleyelim.
👨💻Başlayalım
- Bağımlılıkları Ekleyin
Bu adımda, Retrofit ve OkHttp kütüphanelerini ağ işlemleri için, Room kütüphanesini de yerel veritabanı işlemleri için ekliyoruz.
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'androidx.room:room-runtime:2.2.5'
kapt 'androidx.room:room-compiler:2.2.5'
2.Retrofit ve Room Initialization
Bu adımda, Retrofit ve OkHttp’yi kullanarak ağ işlemleri için bir istemci oluşturuyoruz. Ayrıca, Room için kullanılacak olan veritabanı önbelleği de belirleniyor.
val cacheSize = (10 * 1024 * 1024).toLong() // 10 MB
val cache = Cache(context.cacheDir, cacheSize)
val okHttpClient = OkHttpClient.Builder()
.cache(cache)
.build()
val retrofit = Retrofit.Builder()
.baseUrl("https://api.example.com/")
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.build()
3.Room Entity
Bu adımda, Room veritabanında saklanacak olan verinin modelini belirleyen bir Entity sınıfı oluşturuyoruz. Burada url
alanı benzersiz bir anahtar olarak kullanılıyor.
@Entity(tableName = "data_cache")
data class DataCache(
@PrimaryKey val url: String,
val json: String,
val timestamp: Long
)
4.Room DAO
Bu adımda, Room için Data Access Object (DAO) tanımlıyoruz. DAO, veritabanına erişim işlemlerini içerir. insertCache
ile veri ekleniyor ve getCache
ile belirli bir URL için veriyi sorguluyoruz.
@Dao
interface DataCacheDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertCache(dataCache: DataCache)
@Query("SELECT * FROM data_cache WHERE url = :url")
suspend fun getCache(url: String): DataCache?
}
5. Room Database
Bu adımda, Room veritabanını temsil eden bir abstract sınıf tanımlıyoruz ve içinde kullanılacak DAO’yu belirtiyoruz.
@Database(entities = [DataCache::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun dataCacheDao(): DataCacheDao
}
6. Room Database Instantiate
Bu adımda, Room veritabanını oluşturuyoruz.
val db = Room.databaseBuilder(
applicationContext,
AppDatabase::class.java, "cache-database"
).build()
7.Cache Expiry Time Belirlenmesi
Bu adımda, önbelleğin geçerliliğini belirlemek için bir zaman tanımlıyoruz.
const val CACHE_VALIDITY = 5 * 60 * 1000 // Önbellek geçerlilik süresi, örneğin, 5 dakika
8.Fetch Data with Caching Logic
Bu adımda, veriyi önbellekten almaya çalışan bir fonksiyon oluşturuyoruz. Eğer veri önbellekte mevcut ve hala geçerliyse, hemen geri döner. Aksi takdirde, ağdan veri çekilir ve hem önbelleğe hem de Room veritabanına kaydedilir. Eğer bir hata oluşursa, boş bir string döner.
suspend fun fetchData(url: String): String {
val cachedData = db.dataCacheDao().getCache(url)
if (cachedData != null && System.currentTimeMillis() - cachedData.timestamp < CACHE_VALIDITY) {
return cachedData.json // Eğer hala geçerliyse önbelleğe alınmış veriyi döndür
} else {
try {
val responseBody = retrofit.create(YourApiService::class.java).getData(url).body()
if (responseBody != null) {
db.dataCacheDao().insertCache(DataCache(url, responseBody, System.currentTimeMillis()))
}
return responseBody ?: ""
} catch (e: Exception) {
e.printStackTrace()
return ""
}
}
}
Sonuç
Android uygulamalarında önbelleğe alma, performansı ve veri yönetimini optimize etme konusunda kritik bir rol oynar. Bu makalede, Kotlin programlama dilini kullanarak önbellek yönetimini detaylı bir şekilde ele aldık. İn-memory caching, disk caching ve network caching gibi farklı türlerde önbellekleme stratejilerini anladık. Ayrıca, Retrofit ve Room gibi güçlü kütüphaneleri kullanarak API yanıtlarını önbelleğe almayı adım adım öğrendik.
Önbellekleme stratejilerini doğru bir şekilde uygulamak, kullanıcı deneyimini iyileştirmenin yanı sıra veri alışverişini daha verimli hale getirir. Ancak, bu stratejilerin kullanımında dikkat edilmesi gereken bazı best practices ve önemli hususlar bulunmaktadır.
Unutulmamalıdır ki, uygulama gereksinimlerine bağlı olarak önbellekleme stratejileri ayarlanmalı ve sürekli olarak izlenmelidir. Bu sayede, uygulama hem hızlı hem de güvenilir bir şekilde çalışmaya devam eder.