Le répertoire de cache de l'application est un stockage temporaire de données qui peuvent être recréées lors de la prochaine utilisation. Selon Android Developers, 2026, le système peut supprimer des fichiers de ce répertoire en cas de manque de mémoire sans avertissement, donc l'application ne doit pas compter sur la conservation du cache pour les données critiques. Une bonne utilisation du répertoire de cache réduit l'espace occupé et accélère le chargement du contenu.
Points Clés
context.cacheDir et context.externalCacheDir pour stocker le cache sur la mémoire interne et externeNSCachesDirectory, qui est automatiquement exclu des sauvegardes iCloudLe répertoire de cache est un répertoire spécial dans la mémoire interne (ou externe) de l'application conçu pour les fichiers temporaires. La principale différence avec Internal Storage : le système a le droit de supprimer des fichiers du cache sans préavis si l'appareil manque d'espace libre. Par conséquent, l'application ne doit jamais stocker la seule copie des données importantes de l'utilisateur dans le cache. Le cache est optimal pour les images téléchargées, les réponses serveur, les ressources précompilées et toutes autres données qui peuvent être restaurées à distance ou recréées par programmation.
Sous Android, le répertoire de cache se trouve à /data/data/<package>/cache/ et est accessible via context.cacheDir. La taille du cache n'est pas explicitement limitée, mais Google Play recommande de ne pas dépasser 100 Mo, car les applications avec un gros cache reçoivent des avis négatifs des utilisateurs. Sous iOS, le répertoire de cache se trouve à l'intérieur du conteneur Sandbox à Library/Caches/ et est accessible via NSCachesDirectory. iOS peut supprimer des fichiers de Caches lors de la restauration de l'appareil à partir d'une sauvegarde ou en cas de manque critique d'espace — les utilisateurs doivent en être informés dans la documentation de l'application.
Comprendre quelles données peuvent être placées en toute sécurité dans le cache et lesquelles doivent être stockées dans Internal Storage ou Documents est une compétence clé du développeur. Une mauvaise utilisation du cache entraîne deux problèmes opposés : soit l'application occupe trop d'espace (si le développeur stocke dans le cache ce qui devrait être dans Documents), soit l'utilisateur perd des données (si le développeur stocke dans le cache ce qui devrait être conservé de façon permanente). Suivez une règle simple : si les données peuvent être récupérées — cache, si la récupération est impossible — Internal Storage ou Documents.
Différents types de données ont une vitesse de recréation et des exigences d'espace différentes. Comprendre ces caractéristiques aide le développeur à choisir correctement quels fichiers placer dans le cache et lesquels dans le stockage permanent.
Le type le plus courant de données mises en cache sont les images téléchargées depuis le réseau. Les bibliothèques Glide, Picasso et Coil enregistrent automatiquement les images téléchargées dans le répertoire de cache de l'application. La taille typique du cache d'images dans les applications sociales varie de 50 à 200 Mo. La taille du cache dépend de la résolution d'écran de l'appareil et de la quantité de contenu visualisé. Glide utilise une mise en cache à deux niveaux : il vérifie d'abord le cache L1 dans la RAM (algorithme LRU), puis le cache L2 sur le disque. Cela garantit un chargement rapide des images visualisées à plusieurs reprises sans requête réseau supplémentaire. La configuration de la taille maximale du cache disque via DiskCacheStrategy permet de contrôler l'espace occupé : lorsque la limite est dépassée, la bibliothèque supprime automatiquement les fichiers les moins utilisés.
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 ->
// écrire des données dans le cache
}
}
Les réponses aux requêtes API peuvent être mises en cache pour un accès hors ligne et pour réduire la charge du serveur. OkHttp fournit un support de mise en cache intégré via la classe Cache. Les en-têtes de réponse Cache-Control et ETag gèrent la politique de cache : le serveur spécifie pendant combien de temps la réponse est considérée comme valide. Avec une configuration appropriée, le cache de requêtes réseau peut réduire le temps de chargement des données de 60 à 80 % lors de visites répétées et fournir des fonctionnalités de base de l'application sans connexion Internet. La taille du cache de requêtes réseau dépasse rarement 10–20 Mo, mais avec une utilisation intensive de l'application, elle peut atteindre 50 Mo. Configurez la taille maximale du cache via le constructeur OkHttpClient.Builder et vérifiez la validité des données mises en cache à chaque démarrage de l'application.
Les bases de données SQLite peuvent générer des fichiers temporaires pendant leur fonctionnement : fichiers WAL (Write-Ahead Log), journaux de restauration et pages d'index. Ces fichiers sont stockés à côté de la base de données principale, mais pour les bases de données temporaires (par exemple, recherche en texte intégral ou analytics), l'emplacement dans le répertoire de cache peut être spécifié. Les programmes de shader précompilés OpenGL et Vulkan sont également mis en cache dans ce répertoire, ce qui accélère le premier chargement des scènes graphiques. Sous iOS, NSCachesDirectory est recommandé pour stocker les données précompilées de Core Data et les fichiers temporaires de traitement d'images.
Le vidage du cache peut se produire automatiquement (par le système) ou manuellement (par l'utilisateur ou l'application). Comprendre le comportement du système dans différents scénarios est nécessaire pour prévenir la perte de données.
Sous Android, le système lance le processus de vidage du cache lorsque l'espace libre sur la partition /data tombe en dessous d'un seuil critique (généralement 500 Mo). Le processus cacheflush analyse la taille du cache de toutes les applications installées et supprime les fichiers les moins utilisés, en commençant par les plus anciens. L'utilisateur peut également vider manuellement le cache de toutes les applications via les paramètres système : « Paramètres → Stockage → Cache → Vider le cache. » Sous iOS, le vidage automatique de Caches se produit lors de la restauration de l'appareil à partir d'une sauvegarde — iOS ne restaure pas le contenu de Library/Caches/. De plus, iOS peut supprimer sélectivement des fichiers de Caches lorsque l'espace libre vient à manquer, en utilisant le mécanisme de stockage purgeable pour les données isolées.
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)
}
Le développeur peut implémenter le vidage programmatique du cache à la demande de l'utilisateur ou selon un calendrier. Sous Android, pour vider le cache de l'application elle-même, supprimez tous les fichiers dans context.cacheDir et context.externalCacheDir. Sous iOS, videz le contenu de Library/Caches/ mais ne supprimez pas le répertoire lui-même — seulement son contenu. Il est recommandé d'afficher à l'utilisateur la taille actuelle du cache dans les paramètres de l'application avec un bouton « Vider le cache » avec confirmation. Selon Google Play Console, les applications avec un bouton de vidage du cache reçoivent 22 % de plaintes en moins concernant le manque d'espace par rapport aux applications sans cette fonctionnalité. Le vidage du cache doit être sûr : l'application doit gérer correctement la situation où les fichiers mis en cache sont supprimés et les recharger de manière transparente lors du prochain accès.
Malgré le même objectif, l'implémentation des répertoires de cache sur Android et iOS présente des différences significatives. Le développeur doit en tenir compte pour le bon fonctionnement de l'application sur les deux plateformes.
| Caractéristique | Android | iOS |
|---|---|---|
| Chemin par défaut | /data/data/<package>/cache/ | Library/Caches/ |
| API d'accès | context.cacheDir | NSCachesDirectory |
| Cache externe | context.externalCacheDir | Non disponible |
| Sauvegarde | Non sauvegardé | Non sauvegardé |
| Vidage système | En cas de manque d'espace | Lors de la restauration depuis une sauvegarde et en cas de manque d'espace |
| Visibilité utilisateur | Dans les paramètres de l'application | Uniquement lors de la connexion à un ordinateur |
Android fournit un répertoire de cache externe séparé via context.externalCacheDir — il se trouve sur la carte SD (si installée) et n'est pas supprimé lors de la désinstallation de l'application. C'est pratique pour les gros fichiers média, mais cela crée un risque de laisser des résidus sur la carte mémoire. iOS n'a pas de concept de cache externe : tous les fichiers temporaires sont stockés à l'intérieur du conteneur Sandbox et sont garantis d'être supprimés lors de la désinstallation. Sous Android, le cache est visible pour l'utilisateur dans les paramètres de l'application et il peut le vider manuellement. Sous iOS, les paramètres système n'affichent pas la taille du cache des applications individuelles — l'utilisateur ne peut vider le cache qu'en supprimant et en réinstallant l'application, à moins que le développeur n'ait ajouté un bouton de vidage dans l'interface.
Une différence importante — le comportement lors de la restauration. Sous iOS, lors de la restauration à partir d'une sauvegarde iTunes ou iCloud, le répertoire Caches n'est pas restauré, car iOS suppose que les données mises en cache seront recréées au premier démarrage. Sous Android, lors de la restauration à partir de Google Drive, seul Internal Storage est sauvegardé — le cache reste vide après la restauration. Dans les deux cas, l'application doit fonctionner correctement avec un cache vide, sans afficher d'erreurs à l'utilisateur ni perdre de fonctionnalités.
La gestion appropriée du cache de l'application est l'un des facteurs influençant l'expérience utilisateur et la notation de l'application. Les recommandations suivantes aideront à éviter les problèmes typiques et à améliorer la satisfaction des utilisateurs.
context.externalCacheDir peut retourner null si la carte SD n'est pas installée ou indisponible. Prévoyez toujours un repli vers le cache interneSurveillez régulièrement la taille du cache dans les analytics de l'application. Intégrez l'envoi de la métrique de taille du cache dans Firebase Analytics ou un système similaire. Si la taille moyenne du cache dépasse 100 Mo, optimisez la stratégie de mise en cache : réduisez le TTL pour les données rarement utilisées, implémentez la compression des images avant la mise en cache (WebP au lieu de PNG, réduisez la qualité JPEG à 85 %), utilisez la pagination pour le chargement du contenu depuis le serveur. N'oubliez pas que les utilisateurs disposant d'appareils de 16–32 Go sont particulièrement sensibles à la taille de l'application : lorsque le cache atteint 200 Mo, de nombreux utilisateurs commencent à chercher un moyen de le vider ou suppriment simplement l'application. Selon une enquête de Google, 38 % des utilisateurs ont supprimé au moins une application en raison de la croissance incontrôlée du cache et de l'espace occupé.
Foire Aux Questions
Non, le vidage du cache supprime uniquement les fichiers temporaires (images enregistrées, réponses serveur). Les données de l'utilisateur (mots de passe, paramètres, bases de données) sont stockées dans Internal Storage et ne sont pas affectées par le vidage du cache.
Google Play recommande de ne pas dépasser 100 Mo. Pour les applications avec un contenu multimédia intensif (réseaux sociaux, messageries), jusqu'à 200 Mo est acceptable à condition qu'un vidage automatique soit implémenté et qu'une limite soit configurée via un cache discrétionnaire.
Oui, iOS peut supprimer des fichiers de Library/Caches en cas de manque d'espace ou lors d'une restauration à partir d'une sauvegarde. Le système utilise un mécanisme de stockage purgeable pour le vidage automatique des données non critiques.
cacheDir se trouve dans la mémoire interne de l'appareil et est supprimé lors de la désinstallation de l'application. externalCacheDir est situé sur la carte SD et peut rester après la désinstallation — il doit être nettoyé manuellement via le code au premier démarrage après la réinstallation.
Les bibliothèques comme Glide, Picasso et Coil utilisent une mise en cache à deux niveaux : L1 — RAM (cache LRU pour un accès instantané), L2 — disque (répertoire de cache de l'application). Le cache disque a une limite de taille configurable et une politique de suppression des fichiers anciens.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi