La directory cache dell'applicazione è un archivio temporaneo di dati che possono essere ricreati al successivo utilizzo. Secondo Android Developers, 2026, il sistema può eliminare i file da questa directory in caso di memoria insufficiente senza preavviso, quindi l'applicazione non deve fare affidamento sulla conservazione della cache per dati criticamente importanti. L'uso corretto della directory cache riduce lo spazio occupato e accelera il caricamento dei contenuti.
Punti Chiave
context.cacheDir e context.externalCacheDir per archiviare la cache su memoria interna ed esternaNSCachesDirectory, che viene automaticamente escluso dai backup iCloudLa directory cache è una directory speciale nella memoria interna (o esterna) dell'applicazione progettata per file temporanei. La differenza principale rispetto a Internal Storage: il sistema ha il diritto di eliminare file dalla cache senza preavviso se il dispositivo ha poco spazio libero. Pertanto, l'applicazione non deve mai memorizzare l'unica copia dei dati importanti dell'utente nella cache. La cache è ottimale per immagini scaricate, risposte del server, risorse precompilate e qualsiasi altro dato che può essere ripristinato da remoto o ricreato programmaticamente.
Su Android, la directory cache si trova in /data/data/<package>/cache/ ed è accessibile tramite context.cacheDir. La dimensione della cache non è esplicitamente limitata, ma Google Play raccomanda di non superare i 100 MB, poiché le app con cache grande ricevono recensioni negative dagli utenti. Su iOS, la directory cache si trova all'interno del contenitore Sandbox in Library/Caches/ ed è accessibile tramite NSCachesDirectory. iOS può eliminare file da Caches quando si ripristina il dispositivo da un backup o in caso di grave mancanza di spazio — gli utenti devono essere informati di ciò nella documentazione dell'app.
Capire quali dati possono essere inseriti in modo sicuro nella cache e quali devono essere archiviati in Internal Storage o Documents è una competenza chiave dello sviluppatore. L'uso errato della cache porta a due problemi opposti: o l'app occupa troppo spazio (se lo sviluppatore memorizza nella cache ciò che dovrebbe essere in Documents) o l'utente perde dati (se lo sviluppatore memorizza nella cache ciò che dovrebbe essere conservato permanentemente). Segui una regola semplice: se i dati possono essere recuperati — cache, se il recupero è impossibile — Internal Storage o Documents.
Diversi tipi di dati hanno velocità di ricreazione e requisiti di spazio differenti. Comprendere queste caratteristiche aiuta lo sviluppatore a scegliere correttamente quali file inserire nella cache e quali nell'archivio permanente.
Il tipo più comune di dati memorizzati nella cache sono le immagini scaricate dalla rete. Le librerie Glide, Picasso e Coil salvano automaticamente le immagini scaricate nella directory cache dell'app. La dimensione tipica della cache delle immagini nelle app social varia da 50 a 200 MB. La dimensione della cache dipende dalla risoluzione dello schermo del dispositivo e dalla quantità di contenuto visualizzato. Glide utilizza una cache a due livelli: prima controlla la cache L1 nella RAM (algoritmo LRU), poi la cache L2 su disco. Ciò garantisce un caricamento rapido delle immagini visualizzate ripetutamente senza una richiesta di rete aggiuntiva. La configurazione della dimensione massima della cache su disco tramite DiskCacheStrategy consente di controllare lo spazio occupato: quando il limite viene superato, la libreria rimuove automaticamente i file meno utilizzati.
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 ->
// scrivere dati nella cache
}
}
Le risposte alle richieste API possono essere memorizzate nella cache per l'accesso offline e per ridurre il carico del server. OkHttp fornisce supporto integrato per la cache tramite la classe Cache. Le intestazioni di risposta Cache-Control e ETag gestiscono la politica di caching: il server specifica per quanto tempo la risposta è considerata valida. Con una configurazione appropriata, la cache delle richieste di rete può ridurre il tempo di caricamento dei dati del 60–80% nelle visite ripetute e fornire funzionalità di base dell'app senza connessione Internet. La dimensione della cache delle richieste di rete raramente supera i 10–20 MB, ma con un uso intensivo dell'app può raggiungere i 50 MB. Configura la dimensione massima della cache tramite il costruttore OkHttpClient.Builder e verifica la validità dei dati memorizzati nella cache a ogni avvio dell'app.
I database SQLite possono generare file temporanei durante il funzionamento: file WAL (Write-Ahead Log), journal di rollback e pagine di indice. Questi file vengono archiviati insieme al database principale, ma per database temporanei (ad esempio, ricerca full-text o analytics) è possibile specificare la posizione nella directory cache. I programmi shader precompilati OpenGL e Vulkan vengono anch'essi memorizzati nella cache in questa directory, accelerando il primo caricamento delle scene grafiche. Su iOS, NSCachesDirectory è raccomandato per archiviare dati precompilati di Core Data e file temporanei di elaborazione delle immagini.
La pulizia della cache può avvenire automaticamente (dal sistema) o manualmente (dall'utente o dall'app). Comprendere il comportamento del sistema in diversi scenari è necessario per prevenire la perdita di dati.
Su Android, il sistema avvia il processo di pulizia della cache quando lo spazio libero sulla partizione /data scende al di sotto di una soglia critica (di solito 500 MB). Il processo cacheflush analizza la dimensione della cache di tutte le app installate e rimuove i file meno utilizzati, iniziando dai più vecchi. L'utente può anche pulire manualmente la cache di tutte le app tramite le impostazioni di sistema: “Impostazioni → Archiviazione → Cache → Pulisci cache.” Su iOS, la pulizia automatica di Caches avviene quando si ripristina il dispositivo da un backup — iOS non ripristina il contenuto di Library/Caches/. Inoltre, iOS può eliminare selettivamente file da Caches quando lo spazio libero si esaurisce, utilizzando il meccanismo di archiviazione purgabile per dati isolati.
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)
}
Lo sviluppatore può implementare la pulizia programmata della cache su richiesta dell'utente o secondo una pianificazione. Su Android, per pulire la cache dell'app stessa, basta eliminare tutti i file in context.cacheDir e context.externalCacheDir. Su iOS, pulisci il contenuto di Library/Caches/ ma non eliminare la directory stessa — solo il suo contenuto. Si raccomanda di mostrare all'utente la dimensione corrente della cache nelle impostazioni dell'app insieme a un pulsante “Pulisci cache” con conferma. Secondo Google Play Console, le app con un pulsante di pulizia della cache ricevono il 22% in meno di reclami sulla mancanza di spazio rispetto alle app senza questa funzione. La pulizia della cache deve essere sicura: l'app deve gestire correttamente la situazione in cui i file memorizzati nella cache vengono eliminati e ricaricarli in modo trasparente al prossimo accesso.
Nonostante lo stesso scopo, l'implementazione delle directory cache su Android e iOS presenta differenze significative. Lo sviluppatore deve tenerne conto per il corretto funzionamento dell'app su entrambe le piattaforme.
| Caratteristica | Android | iOS |
|---|---|---|
| Percorso predefinito | /data/data/<package>/cache/ | Library/Caches/ |
| API di accesso | context.cacheDir | NSCachesDirectory |
| Cache esterna | context.externalCacheDir | Non disponibile |
| Backup | Non sottoposto a backup | Non sottoposto a backup |
| Pulizia del sistema | Quando manca spazio | Al ripristino da backup e quando manca spazio |
| Visibilità all'utente | Nelle impostazioni dell'app | Solo quando connesso a un computer |
Android fornisce una directory cache esterna separata tramite context.externalCacheDir — si trova sulla scheda SD (se installata) e non viene eliminata quando si disinstalla l'app. Questo è comodo per file multimediali di grandi dimensioni, ma crea il rischio di lasciare residui sulla scheda di memoria. iOS non ha il concetto di cache esterna: tutti i file temporanei vengono archiviati all'interno del contenitore Sandbox e vengono eliminati garantitamente alla disinstallazione. Su Android, la cache è visibile all'utente nelle impostazioni dell'app e questi può pulirla manualmente. Su iOS, le impostazioni di sistema non mostrano la dimensione della cache delle singole app — l'utente può pulire la cache solo eliminando e reinstallando l'app, a meno che lo sviluppatore non abbia aggiunto un pulsante di pulizia nell'interfaccia.
Una differenza importante — il comportamento al ripristino. Su iOS, quando si ripristina da un backup di iTunes o iCloud, la directory Caches non viene ripristinata, poiché iOS presume che i dati memorizzati nella cache verranno ricreati al primo avvio. Su Android, quando si ripristina da Google Drive, solo Internal Storage viene sottoposto a backup — la cache rimane vuota dopo il ripristino. In entrambi i casi, l'app deve funzionare correttamente con una cache vuota, senza mostrare errori all'utente o perdere funzionalità.
La gestione corretta della cache dell'app è uno dei fattori che influenzano l'esperienza utente e la valutazione dell'app. Le seguenti raccomandazioni aiuteranno a evitare problemi tipici e ad aumentare la soddisfazione degli utenti.
context.externalCacheDir può restituire null se la scheda SD non è installata o non è disponibile. Prevedi sempre un fallback sulla cache internaMonitora regolarmente la dimensione della cache nell'analisi dell'app. Integra l'invio della metrica della dimensione della cache in Firebase Analytics o in un sistema simile. Se la dimensione media della cache supera i 100 MB, ottimizza la strategia di caching: riduci il TTL per i dati usati raramente, implementa la compressione delle immagini prima del caching (WebP invece di PNG, riduci la qualità JPEG all'85%), utilizza la paginazione per il caricamento dei contenuti dal server. Ricorda che gli utenti con dispositivi da 16–32 GB sono particolarmente sensibili alla dimensione dell'app: quando la cache raggiunge i 200 MB, molti utenti iniziano a cercare un modo per pulirla o semplicemente eliminano l'app. Secondo un sondaggio di Google, il 38% degli utenti ha eliminato almeno un'app a causa della crescita incontrollata della cache e del consumo di spazio.
Domande Frequenti
No, la pulizia della cache rimuove solo i file temporanei (immagini salvate, risposte del server). I dati dell'utente (password, impostazioni, database) sono archiviati in Internal Storage e non vengono influenzati dalla pulizia della cache.
Google Play raccomanda di non superare i 100 MB. Per le app con contenuti multimediali intensivi (social network, messaggistica), fino a 200 MB è accettabile a condizione che venga implementata la pulizia automatica e configurato un limite tramite una cache discrezionale.
Sì, iOS può eliminare file da Library/Caches quando manca spazio o quando si ripristina da un backup. Il sistema utilizza un meccanismo di archiviazione purgabile per la pulizia automatica dei dati non critici.
cacheDir si trova nella memoria interna del dispositivo e viene eliminato quando si disinstalla l'app. externalCacheDir si trova sulla scheda SD e può rimanere dopo la disinstallazione — deve essere pulito manualmente tramite codice al primo avvio dopo la reinstallazione.
Librerie come Glide, Picasso e Coil utilizzano una cache a due livelli: L1 — RAM (cache LRU per accesso immediato), L2 — disco (directory cache dell'app). La cache su disco ha un limite di dimensione configurabile e una politica di rimozione dei file vecchi.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche