Directorul cache al aplicației este o stocare temporară de date care pot fi recreate la următoarea utilizare. Potrivit Android Developers, 2026, sistemul poate șterge fișierele din acest director atunci când memoria este insuficientă, fără avertisment, prin urmare aplicația nu trebuie să se bazeze pe păstrarea cache-ului pentru datele critice. Utilizarea corectă a directorului cache reduce spațiul ocupat și accelerează încărcarea conținutului.
Principalele
context.cacheDir și context.externalCacheDir pentru stocarea cache-ului în memoria internă și externăNSCachesDirectory, care este exclus automat din copia de rezervă iCloudDirectorul cache este un director special în memoria internă (sau externă) a aplicației, destinat fișierelor temporare. Diferența principală față de Internal Storage: sistemul are dreptul să șteargă fișierele din cache fără notificare, dacă dispozitivului îi lipsește spațiul liber. Prin urmare, aplicația nu trebuie să stocheze niciodată în cache singura copie a datelor importante ale utilizatorului. Cache-ul este optim pentru imagini descărcate, răspunsuri ale serverului, resurse precompilate și orice alte date care pot fi restaurate de la distanță sau recreate programatic.
Pe Android, directorul cache se află la calea /data/data/<pachet>/cache/ și este accesibil prin context.cacheDir. Dimensiunea cache-ului nu este limitată explicit, dar Google Play recomandă să nu depășească 100 MB, deoarece aplicațiile cu cache mare primesc recenzii negative de la utilizatori. Pe iOS, directorul cache se află în interiorul containerului Sandbox la calea Library/Caches/ și este accesibil prin NSCachesDirectory. iOS poate șterge fișierele din Caches la restaurarea dispozitivului dintr-o copie de rezervă sau la lipsa critică de spațiu — utilizatorii trebuie avertizați despre acest lucru în documentația aplicației.
Înțelegerea datelor care pot fi plasate în siguranță în cache și a celor care trebuie stocate în Internal Storage sau Documents este o abilitate cheie a dezvoltatorului. Utilizarea incorectă a cache-ului duce la două probleme opuse: fie aplicația ocupă prea mult spațiu (dacă dezvoltatorul stochează în cache ceea ce ar trebui să fie în Documents), fie utilizatorul pierde date (dacă dezvoltatorul stochează în cache ceea ce ar trebui să fie permanent). Urmați o regulă simplă: dacă datele pot fi restaurate — cache, dacă restaurarea este imposibilă — Internal Storage sau Documents.
Diferite tipuri de date au viteze de recreare și cerințe de volum diferite. Înțelegerea acestor caracteristici ajută dezvoltatorul să aleagă corect ce fișiere să plaseze în cache și care în stocarea permanentă.
Cel mai comun tip de date stocate în cache sunt imaginile descărcate din rețea. Bibliotecile Glide, Picasso și Coil salvează automat imaginile descărcate în directorul cache al aplicației. Dimensiunea tipică a cache-ului de imagini în aplicațiile sociale este între 50 și 200 MB. Dimensiunea cache-ului depinde de rezoluția ecranului dispozitivului și de cantitatea de conținut vizualizat. Glide utilizează caching pe două niveluri: mai întâi verifică cache-ul L1 în memoria RAM (algoritmul LRU), apoi cache-ul L2 pe disc. Aceasta asigură încărcarea rapidă a imaginilor revizuite fără o nouă solicitare în rețea. Configurarea dimensiunii maxime a cache-ului pe disc prin DiskCacheStrategy permite controlul spațiului ocupat: la depășirea limitei, biblioteca șterge automat cele mai puțin utilizate fișiere.
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 ->
// scrierea datelor în cache
}
}
Răspunsurile cererilor API pot fi stocate în cache pentru acces offline și reducerea încărcării serverului. OkHttp oferă suport integrat pentru caching prin clasa Cache. Anteturile de răspuns Cache-Control și ETag gestionează politica de caching: serverul specifică cât timp răspunsul este considerat actual. Cu o configurare corectă, cache-ul cererilor de rețea poate reduce timpul de încărcare a datelor cu 60–80% la vizitele repetate și poate asigura funcționalitatea de bază a aplicației fără conexiune la internet. Dimensiunea cache-ului cererilor de rețea rareori depășește 10–20 MB, dar la utilizarea activă a aplicației poate atinge 50 MB. Configurați dimensiunea maximă a cache-ului prin constructorul OkHttpClient.Builder și verificați actualitatea datelor stocate în cache la fiecare pornire a aplicației.
Bazele de date SQLite pot genera fișiere temporare în timpul funcționării: fișiere WAL (Write-Ahead Log), jurnale de revenire și pagini de index. Aceste fișiere sunt stocate lângă baza de date principală, dar pentru bazele de date temporare (de exemplu, căutare full-text sau analitică) se poate specifica amplasarea în directorul cache. Programele de shader precompilate OpenGL și Vulkan sunt, de asemenea, stocate în cache în acest director, ceea ce accelerează prima încărcare a scenelor grafice. Pe iOS, NSCachesDirectory este recomandat pentru stocarea datelor precompilate Core Data și a fișierelor temporare de procesare a imaginilor.
Ștergerea cache-ului poate avea loc automat (de către sistem) sau manual (de către utilizator sau aplicație). Înțelegerea comportamentului sistemului în diferite scenarii este necesară pentru prevenirea pierderii de date.
Pe Android, sistemul inițiază procesul de ștergere a cache-ului atunci când cantitatea de spațiu liber pe partiția /data scade sub pragul critic (de obicei 500 MB). Procesul cacheflush analizează dimensiunea cache-ului tuturor aplicațiilor instalate și șterge cele mai puțin utilizate fișiere, începând cu cele mai vechi. Utilizatorul poate, de asemenea, să șteargă manual cache-ul tuturor aplicațiilor prin setările sistemului: „Setări → Stocare → Cache → Șterge cache-ul". Pe iOS, ștergerea automată a Caches are loc la restaurarea dispozitivului dintr-o copie de rezervă — iOS nu restaurează conținutul Library/Caches/. În plus, iOS poate șterge selectiv fișiere din Caches atunci când spațiul liber de pe dispozitiv se termină, folosind mecanismul purgeable storage pentru date izolate.
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)
}
Dezvoltatorul poate implementa ștergerea programatică a cache-ului la cererea utilizatorului sau conform unui program. Pe Android, pentru a șterge propriul cache, este suficient să ștergeți toate fișierele din context.cacheDir și context.externalCacheDir. Pe iOS, puteți șterge conținutul Library/Caches/, dar nu ștergeți directorul în sine — doar conținutul său. Se recomandă să afișați utilizatorului dimensiunea actuală a cache-ului în setările aplicației și un buton „Șterge cache-ul" cu confirmare. Conform Google Play Console, aplicațiile cu buton de ștergere a cache-ului primesc cu 22% mai puține plângeri privind lipsa de spațiu comparativ cu aplicațiile fără această funcție. Ștergerea cache-ului trebuie să fie sigură: aplicația trebuie să gestioneze corect situația în care fișierele stocate în cache au fost șterse și să le reîncarce transparent la următoarea accesare.
În ciuda aceluiași scop, implementarea directoarelor cache pe Android și iOS are diferențe semnificative. Dezvoltatorul trebuie să le ia în considerare pentru funcționarea corectă a aplicației pe ambele platforme.
| Caracteristică | Android | iOS |
|---|---|---|
| Calea implicită | /data/data/<pachet>/cache/ | Library/Caches/ |
| API de acces | context.cacheDir | NSCachesDirectory |
| Cache extern | context.externalCacheDir | Lipsește |
| Copie de rezervă | Nu se face backup | Nu se face backup |
| Ștergere de către sistem | La lipsa de spațiu | La restaurarea din copie de rezervă și lipsa de spațiu |
| Vizibilitate pentru utilizator | În setările aplicației | Doar la conectarea la computer |
Android oferă un director cache extern separat prin context.externalCacheDir — acesta se află pe cardul SD (dacă este instalat) și nu este șters la dezinstalarea aplicației. Acest lucru este convenabil pentru fișiere media mari, dar creează riscul de a lăsa gunoi pe cardul de memorie. iOS nu are conceptul de cache extern: toate fișierele temporare sunt stocate în interiorul containerului Sandbox și sunt garantat șterse la dezinstalare. Pe Android, cache-ul este vizibil utilizatorului în setările aplicației și acesta poate să-l șteargă manual. Pe iOS, setările sistemului nu afișează dimensiunea cache-ului aplicațiilor individuale — utilizatorul poate șterge cache-ul doar prin ștergerea și reinstalarea aplicației, dacă dezvoltatorul nu a adăugat un buton de ștergere în interfață.
O diferență importantă — comportamentul la restaurare. Pe iOS, la restaurarea din copia de rezervă iTunes sau iCloud, directorul Caches nu este restaurat, deoarece iOS consideră că datele stocate în cache vor fi recreate la prima pornire. Pe Android, la restaurarea din Google Drive, doar Internal Storage este arhivat — cache-ul rămâne gol după restaurare. În ambele cazuri, aplicația trebuie să funcționeze corect cu cache-ul gol, fără a afișa erori utilizatorului și fără a pierde funcționalitatea.
Gestionarea competentă a cache-ului aplicației este unul dintre factorii care influențează experiența utilizatorului și ratingul aplicației. Următoarele recomandări vor ajuta la evitarea problemelor tipice și la creșterea satisfacției utilizatorilor.
context.externalCacheDir poate returna null dacă cardul SD nu este instalat sau indisponibil. Prevedeți întotdeauna un fallback la cache-ul internMonitorizați regulat dimensiunea cache-ului în analitica aplicației. Integrați trimiterea metricii dimensiunii cache-ului în Firebase Analytics sau un sistem similar. Dacă dimensiunea medie a cache-ului depășește 100 MB, optimizați strategia de caching: reduceți TTL pentru datele rar utilizate, implementați compresia imaginilor înainte de stocarea în cache (WebP în loc de PNG, reducerea calității JPEG la 85%), utilizați paginarea pentru încărcarea conținutului de pe server. Amintiți-vă că utilizatorii cu dispozitive de 16–32 GB sunt deosebit de sensibili la dimensiunea aplicației: la atingerea a 200 MB de cache, mulți utilizatori încep să caute o modalitate de ștergere sau pur și simplu șterg aplicația. Conform unui sondaj Google, 38% dintre utilizatori au șters cel puțin o aplicație din cauza creșterii necontrolate a cache-ului și a spațiului ocupat.
Întrebări frecvente
Nu, ștergerea cache-ului elimină doar fișierele temporare (imagini salvate, răspunsuri ale serverului). Datele utilizatorului (parole, setări, baze de date) sunt stocate în Internal Storage și nu sunt afectate la ștergerea cache-ului.
Google Play recomandă să nu depășească 100 MB. Pentru aplicațiile cu conținut media intensiv (rețele sociale, mesagerie) este permis până la 200 MB, cu condiția implementării ștergerii automate și a stabilirii limitei prin cache discret.
Da, iOS poate șterge fișierele din Library/Caches la lipsa de spațiu sau restaurarea dintr-o copie de rezervă. Sistemul utilizează mecanismul purgeable storage pentru ștergerea automată a datelor necritice.
cacheDir se află în memoria internă a dispozitivului și este șters la dezinstalarea aplicației. externalCacheDir este situat pe cardul SD și poate rămâne după ștergere — trebuie curățat manual prin cod la prima pornire după reinstalare.
Bibliotecile precum Glide, Picasso și Coil utilizează caching pe două niveluri: L1 — memoria RAM (cache LRU pentru acces instantaneu), L2 — discul (directorul cache al aplicației). Cache-ul pe disc are o limită de dimensiune configurabilă și o politică de ștergere a fișierelor vechi.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și