Sobes.tech
Middle

Android tətbiqində məlumatların önbellekləmə mexanizmini necə həyata keçirmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Android-də keş mexanizmini müxtəlif üsullarla həyata keçirmək mümkündür, məlumatların növü və həyat dövrünə uyğun ən uyğun olanı seçərək.

Əsas yanaşmalar:

  • Daxili yaddaş (Internal Storage): Həssas məlumatlar üçün uyğundur, yalnız tətbiq tərəfindən əldə edilə bilər. Məlumatlar tətbiqə məxsus kataloqda saxlanılır.
  • Xarici yaddaş (External Storage): Daha az həssas məlumatlar üçün istifadə olunur, digər tətbiqlər və ya istifadəçi tərəfindən oxuna bilər. İcazələr tələb edir.
  • Shared Preferences: Tətbiq parametrləri kimi kiçik həcmli sadə məlumatların saxlanması üçün idealdır.
  • SQLite verilənlər bazası: Strukturlaşdırılmış məlumatlar üçün güclü həll, mürəkkəb sorğular icra etməyə imkan verir. Android daxilində SQLite dəstəyi mövcuddur.
  • Keş kataloqu: Müvəqqəti məlumatlar üçün xüsusi nəzərdə tutulub. Sistem bu faylları yer boşaltmaq üçün silə bilər.

Daxili yaddaşdan keş üçün nümunə:

// Keş faylını əldə etmək
val cacheFile = File(context.cacheDir, "my_cached_data.txt")

// Məlumatları keşə yazmaq
try {
    FileOutputStream(cacheFile).use { fos ->
        fos.write("Keş üçün məlumat".toByteArray())
    }
} catch (e: IOException) {
    // Xəta ilə işləmək
}

// Keşdən məlumat oxumaq
try {
    FileInputStream(cacheFile).use { fis ->
        val data = fis.readBytes().toString(Charsets.UTF_8)
        // Keşdə saxlanılan məlumatlardan istifadə
    }
} catch (e: IOException) {
    // Xəta ilə işləmək, ola bilər ki, keş boş və ya əlçatan deyil
}

// Keş faylını silmək
cacheFile.delete()

Shared Preferences istifadə nümunəsi:

// Shared Preferences nümunəsini əldə etmək
val sharedPref = context.getSharedPreferences("my_cache_prefs", Context.MODE_PRIVATE)

// Məlumatları yazmaq
with(sharedPref.edit()) {
    putString("cached_key", "cached_value")
    apply()
}

// Məlumatları oxumaq
val cachedValue = sharedPref.getString("cached_key", null)
// cachedValue-dən istifadə

// Məlumatları silmək
with(sharedPref.edit()) {
    remove("cached_key")
    apply()
}

SQLite ilə işləmək üçün tez-tez Room kimi kitabxana-üstü vasitələr istifadə olunur, bu Android Architecture Components-in bir hissəsidir.

// Room istifadə nümunəsi: varlıq təyin etmək
@Entity(tableName = "users")
data class User(
    @PrimaryKey val id: Int,
    val name: String,
    val age: Int?
)

Keş strategiyaları:

  • Cache-Aside: Tətbiq əvvəlcə keşə baxır. Əgər məlumat tapılırsa, istifadə olunur. Əks halda, məlumatlar mənbədən (məsələn, şəbəkə) yüklənir və gələcək sorğular üçün keşə yerləşdirilir.
  • Read-Through: Kitabxana və ya çərçivə (məsələn, OkHttp şəbəkə sorğuları üçün) avtomatik keş idarə edir. Məlumat sorğusunda, keş yoxdursa və ya köhnədirsə, məlumatlar yüklənir və keş yenilənir.
  • Write-Through: Məlumat əvvəlcə keşə yazılır və sonra eyni zamanda əsas mənbəyə də yazılır.
  • Write-Back: Məlumatlar əvvəlcə yalnız keşə yazılır. Dəyişikliklər daha sonra əsas mənbəyə (məsələn, verilənlər bazası) göndərilir, bəzən keş doldurulduqda və ya cədvəl üzrə.

Strategiya və keş metodunun seçimi məlumatların aktuallığı, performans və yadda saxlanılan məlumatların həcmi tələblərinə uyğun olmalıdır. TTL (Time To Live) ilə keşdəki məlumatların aktuallığını təmin etmək də vacibdir.