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:
- 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.
- 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.
- 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.
- 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.
- 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);
}