Кеш директоријум апликације је привремено складиште података који могу бити поново креирани при следећем коришћењу. Према Android Developers, 2026, систем може обрисати датотеке из овог директоријума када нема довољно меморије без упозорења, стога апликација не треба да се ослања на очување кеша за критично важне податке. Правилно коришћење кеш директоријума смањује заузети простор и убрзава учитавање садржаја.
Главно
context.cacheDir и context.externalCacheDir за чување кеша у интерној и екстерној меморијиNSCachesDirectory, који је аутоматски искључен из иЦлоуд резервне копијеКеш директоријум је посебан директоријум у интерној (или екстерној) меморији апликације, намењен за привремене датотеке. Главна разлика у односу на Internal Storage: систем има право да обрише датотеке из кеша без обавештења ако уређају недостаје слободног простора. Стога апликација никада не треба да чува у кешу једину копију важних корисничких података. Кеш је оптималан за преузете слике, одговоре сервера, прекомпајлиране ресурсе и све друге податке који се могу удаљено обновити или поново програмски креирати.
На Android се кеш директоријум налази на путањи /data/data/<пакет>/cache/ и доступан је преко context.cacheDir. Величина кеша није експлицитно ограничена, али Google Play препоручује да не прелази 100 MB, јер апликације са великим кешом добијају негативне рецензије корисника. На iOS кеш директоријум се налази унутар Sandbox контејнера на путањи Library/Caches/ и доступан је преко NSCachesDirectory. iOS може обрисати датотеке из Caches приликом враћања уређаја из резервне копије или при критичном недостатку простора — кориснике треба упозорити о томе у документацији апликације.
Разумевање тога који подаци могу безбедно да се сместе у кеш, а који треба да се чувају у Internal Storage или Documents, кључна је вештина програмера. Неправилно коришћење кеша доводи до два супротна проблема: или апликација заузима превише простора (ако програмер чува у кешу оно што би требало да буде у Documents) или корисник губи податке (ако програмер чува у кешу оно што би требало да буде трајно сачувано). Придржавајте се једноставног правила: ако подаци могу бити обновљени — кеш, ако обнављање није могуће — Internal Storage или Documents.
Различите врсте података имају различиту брзину поновног стварања и захтеве за обимом. Разумевање ових карактеристика помаже програмеру да правилно одабере које датотеке сместити у кеш, а које у трајно складиште.
Најчешћа врста података који се кеширају су слике преузете из мреже. Библиотеке Glide, Picasso и Coil аутоматски чувају преузете слике у кеш директоријуму апликације. Типична величина кеша слика у друштвеним апликацијама износи од 50 до 200 MB. Величина кеша зависи од резолуције екрана уређаја и количине прегледаног садржаја. Glide користи двослојно кеширање: прво проверава L1 кеш у RAM меморији (LRU алгоритам), затим L2 кеш на диску. Ово обезбеђује брзо учитавање поново прегледаних слика без поновног захтева преко мреже. Подешавање максималне величине дисковног кеша преко DiskCacheStrategy омогућава контролу заузетог простора: након прекорачења границе, библиотека аутоматски брише најређе коришћене датотеке.
val cacheDir = File(context.cacheDir, "image_cache")
val maxSize = 50 * 1024 * 1024 // 50 MB
val cache = DiskLruCache.open(cacheDir, 1, 1, maxSize)
cache.edit("key")?.let { editor ->
editor.newOutputStream(0).use { stream ->
// упис података у кеш
}
}
Одговори API захтева могу се кеширати за офлајн приступ и смањење оптерећења сервера. OkHttp пружа уграђену подршку за кеширање преко класе Cache. Заглавља одговора Cache-Control и ETag управљају политиком кеширања: сервер одређује колико дуго се одговор сматра актуелним. Уз правилно подешавање, кеш мрежних захтева може смањити време учитавања података за 60–80% при поновним посетама и обезбедити основну функционалност апликације без интернет везе. Величина кеша мрежних захтева ретко прелази 10–20 MB, али уз активно коришћење апликације може достићи 50 MB. Подесите максималну величину кеша преко конструктора OkHttpClient.Builder и проверавајте актуелност кешираних података при сваком покретању апликације.
SQLite базе података могу генерисати привремене датотеке током рада: WAL датотеке (Write-Ahead Log), дневнике враћања и индексне странице. Ове датотеке се чувају поред главне базе података, али за привремене базе података (нпр. претрага пуног текста или аналитика) може се одредити смештај у кеш директоријум. Прекомпајлирани shader програми OpenGL и Vulkan се такође кеширају у овом директоријуму, што убрзава прво учитавање графичких сцена. На iOS директоријум NSCachesDirectory препоручује се за чување прекомпајлираних Core Data података и привремених датотека за обраду слика.
Чишћење кеша може се одвијати аутоматски (од стране система) или ручно (од стране корисника или апликације). Разумевање понашања система у различитим сценаријима неопходно је за спречавање губитка података.
На Android систем покреће процес чишћења кеша када количина слободног простора на партицији /data падне испод критичног прага (обично 500 MB). Процес cacheflush анализира величину кеша свих инсталираних апликација и брише најређе коришћене датотеке, почевши од најстаријих. Корисник такође може ручно обрисати кеш свих апликација кроз подешавања система: „Подешавања → Складиште → Кеш → Обриши кеш". На iOS аутоматско чишћење Caches се дешава приликом враћања уређаја из резервне копије — iOS не враћа садржај Library/Caches/. Поред тога, iOS може селективно брисати датотеке из Caches када понестане слободног простора на уређају, користећи механизам purgeable storage за изоловане податке.
let fm = FileManager.default
let cachesURL = fm.urls(
for: .cachesDirectory,
in: .userDomainMask
).first!
let contents = try fm.contentsOfDirectory(
at: cachesURL,
includingPropertiesForKeys: nil
)
for fileURL in contents {
try fm.removeItem(at: fileURL)
}
Програмер може имплементирати програмско чишћење кеша на захтев корисника или по распореду. На Android за чишћење сопственог кеша довољно је обрисати све датотеке у context.cacheDir и context.externalCacheDir. На iOS можете обрисати садржај Library/Caches/, али не бришите сам директоријум — само његов садржај. Препоручује се приказивање кориснику тренутне величине кеша у подешавањима апликације и дугмета „Обриши кеш" са потврдом. Према Google Play Console, апликације са дугметом за чишћење кеша добијају 22% мање жалби на недостатак простора у поређењу са апликацијама без такве функције. Чишћење кеша треба да буде безбедно: апликација мора правилно да обради ситуацију када су кеширане датотеке обрисане и транспарентно их поново учита при следећем приступу.
Упркос истој намени, имплементација кеш директоријума на Android и iOS има значајне разлике. Програмер их мора узети у обзир за исправан рад апликације на обе платформе.
| Карактеристика | Android | iOS |
|---|---|---|
| Подразумевана путања | /data/data/<пакет>/cache/ | Library/Caches/ |
| API приступа | context.cacheDir | NSCachesDirectory |
| Екстерни кеш | context.externalCacheDir | Не постоји |
| Резервна копија | Не архивира се | Не архивира се |
| Системско чишћење | При недостатку простора | При враћању из резервне копије и недостатку простора |
| Видљивост кориснику | У подешавањима апликације | Само при повезивању са рачунаром |
Android пружа посебан директоријум екстерног кеша преко context.externalCacheDir — налази се на SD картици (ако је инсталирана) и не брише се при деинсталацији апликације. Ово је згодно за велике медијске датотеке, али ствара ризик остављања отпада на меморијској картици. iOS нема концепт екстерног кеша: све привремене датотеке се чувају унутар Sandbox контејнера и гарантовано се бришу при деинсталацији. На Android кеш је видљив кориснику у подешавањима апликације и он га може ручно обрисати. На iOS системска подешавања не приказују величину кеша појединачних апликација — корисник може обрисати кеш само кроз уклањање и поновну инсталацију апликације, осим ако програмер није додао дугме за чишћење у интерфејсу.
Важна разлика — понашање при враћању. На iOS приликом враћања из iTunes или iCloud резервне копије директоријум Caches се не враћа, јер iOS сматра да ће кеширани подаци бити поново креирани при првом покретању. На Android приликом враћања из Google Drive архивира се само Internal Storage — кеш остаје празан након враћања. У оба случаја апликација мора исправно да ради са празним кешом, не приказујући кориснику грешке и не губећи функционалност.
Вешто управљање кешом апликације један је од фактора који утичу на корисничко искуство и рејтинг апликације. Следеће препоруке ће помоћи да се избегну типични проблеми и повећа задовољство корисника.
context.externalCacheDir може вратити null ако SD картица није инсталирана или недоступна. Увек предвидите fallback на интерни кешРедовно пратите величину кеша у аналитици апликације. Интегришите слање метрике величине кеша у Firebase Analytics или сличан систем. Ако просечна величина кеша прелази 100 MB, оптимизујте стратегију кеширања: смањите TTL за ретко коришћене податке, уведите компресију слика пре кеширања (WebP уместо PNG, смањење квалитета JPEG на 85%), користите пагинацију за учитавање садржаја са сервера. Запамтите да су корисници са уређајима од 16–32 GB посебно осетљиви на величину апликације: када кеш достигне 200 MB, многи корисници почињу да траже начин за чишћење или једноставно бришу апликацију. Према Google анкети, 38% корисника је обрисало бар једну апликацију због неконтролисаног раста кеша и заузетог простора.
Често постављана питања
Не, чишћење кеша уклања само привремене датотеке (сачуване слике, одговоре сервера). Кориснички подаци (лозинке, подешавања, базе података) чувају се у Internal Storage и нису погођени при чишћењу кеша.
Google Play препоручује да не прелази 100 MB. За апликације са интензивним медијским садржајем (друштвене мреже, месинџери) дозвољено је до 200 MB под условом имплементације аутоматског чишћења и постављања границе кроз дискретни кеш.
Да, iOS може обрисати датотеке из Library/Caches при недостатку простора или враћању из резервне копије. Систем користи механизам purgeable storage за аутоматско чишћење некритичних података.
cacheDir се налази у интерној меморији уређаја и брише се при деинсталацији апликације. externalCacheDir се налази на SD картици и може остати након уклањања — потребно га је ручно очистити кроз код при првом покретању након поновне инсталације.
Библиотеке попут Glide, Picasso и Coil користе двослојно кеширање: L1 — RAM меморија (LRU кеш за тренутни приступ), L2 — диск (кеш директоријум апликације). Дисковни кеш има подесиву границу величине и политику уклањања старих датотека.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође