Sobes.tech
Middle

Tudod, hogyan működik a cache-kártya?

sobes.tech MI

Válasz az MI-től

Az Android memória cache (Memory Cache) egy olyan mechanizmus, amely az eszköz RAM-jában tárolja az adatokat a gyors hozzáférés érdekében. Az asszociatív cache elvein alapul.

Hogyan működik:

  1. Adatkérés: Amikor olyan adatokra van szükség, amelyeket cache-ben lehet tárolni (például egy hálózatról származó kép vagy egy összetett művelet eredménye), az alkalmazás először ellenőrzi a cache-t.
  2. Keresés a cache-ben: Ha az adatok megtalálhatók a cache-ben (azaz, a kérés kulcsa megegyezik a cache kulcsával), azokat azonnal visszaadja, elkerülve a lassú bemenet/kimenet műveleteket vagy számításokat. Ezt "cache hit"-nek nevezik.
  3. Cache hiány: Ha az adatok nem találhatók a cache-ben ("cache miss"), az alkalmazás az eredeti forrásból (hálózat, adatbázis stb.) szerzi be őket.
  4. A cache-be helyezés: Az adatok megszerzése után a cache-be kerülnek a későbbi kérdésekhez ugyanazzal a kulccsal.
  5. Kivonás (Cache Eviction): A cache mérete korlátozott. Amikor megtelik, a régi vagy kevésbé használt elemeket eltávolítják, hogy helyet szabadítsanak fel az újaknak. Gyakori kivonási algoritmusok az LRU (Legkevésbé Frissen Használt) és az LFU (Legkevésbé Gyakran Használt).

Androidban LruCache használatával példakód:

// LruCache létrehozása maximális mérettel
private LruCache<String, Bitmap> memoryCache;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // A maximálisan elérhető memória méretének megszerzése (KB-ben)
    final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);

    // A rendelkezésre álló memória 1/8-át használjuk cache-ként
    final int cacheSize = maxMemory / 8;

    memoryCache = new LruCache<String, Bitmap>(cacheSize) {
        @Override
        protected int sizeOf(String key, Bitmap bitmap) {
            // Módszer az egyes cache-elemek méretének kiszámítására
            return bitmap.getByteCount() / 1024;
        }
    };
}

// Elem hozzáadása a cache-hez
public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
    if (getBitmapFromMemCache(key) == null) {
        memoryCache.put(key, bitmap);
    }
}

// Elem lekérése a cache-ből
public Bitmap getBitmapFromMemCache(String key) {
    return memoryCache.get(key);
}