Middle
Кэш картасы кандай иштээрин билесиңби?
sobes.tech AI
AIден жооп
Memory Cache (Эс тутуму) Android — бул түзмөктүн оперативдик эсинде маалыматтарды сактоо механизми, тез жетүү үчүн. Ал ассоциациялык кэштин принциптерине негизделген.
Кандай иштейт:
- Маалымат сураныч: Маалыматтарды сураганда, алар кэшке сакталышы мүмкүн (мисалы, интернеттен сүрөт же кыйын операциянын жыйынтыгы), колдонмо биринчи кэшти текшерет.
- Кэште издөө: Эгер маалыматтар кэште табылса (демек, суроо ачкычы кэштеги ачкычка дал келсе), алар дароо кайтарылат, жай операциялардан же эсептөөлөрдөн качуу үчүн. Бул "cache hit" деп аталат.
- Кэшке түшпөө (Cache Miss): Эгер маалыматтар табылбаса ("cache miss"), колдонмо аларды оригинал булактан алат (тармак, маалымат базасы жана башка).
- Кэшке жайгаштыруу: Алынган соң, маалыматтар келечектеги суранычтар үчүн ошол эле ачкыч менен кэшке салынады.
- Элүү (Cache Eviction): Кэштин чектелген өлчөмү бар. Толуп калганда, эски же азыраак колдонулган элементтер чыгарыла тургандай кылып, орун бошотулат. Жалпысынан колдонулган алгоритмдер — LRU (Азыркы убакытта эң аз колдонулган) жана LFU (Эң аз колдонулган).
Android'деги LruCache колдонуу менен мисал:
// Максималдуу өлчөм менен LruCache түзүү
private LruCache<String, Bitmap> memoryCache;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Колдонмо үчүн максималдуу жеткиликтүү эс тутумдун өлчөмүн алуу (KB)
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
// Жеткиликтүү эс тутумдун 1/8 бөлүгүн кэш үчүн колдонуу
final int cacheSize = maxMemory / 8;
memoryCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
// Ар бир элементтин өлчөмүн эсептөө бирдиктерде,
// кэштин өлчөмүнө ылайык (бул жерде — KB)
return bitmap.getByteCount() / 1024;
}
};
}
// Элементти кэшке кошуу
public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
if (getBitmapFromMemCache(key) == null) {
memoryCache.put(key, bitmap);
}
}
// Элементти кэштен алуу
public Bitmap getBitmapFromMemCache(String key) {
return memoryCache.get(key);
}