El directorio de caché de la aplicación es un almacenamiento temporal de datos que pueden ser recreados en el siguiente uso. Según Android Developers, 2026, el sistema puede eliminar archivos de este directorio cuando falte memoria sin previo aviso, por lo que la aplicación no debe depender de la integridad de la caché para datos críticos. El uso correcto del directorio de caché reduce el espacio ocupado y acelera la carga de contenido.
Puntos Clave
context.cacheDir y context.externalCacheDir para almacenar la caché en memoria interna y externaNSCachesDirectory, que se excluye automáticamente de las copias de seguridad de iCloudEl directorio de caché es un directorio especial en la memoria interna (o externa) de la aplicación diseñado para archivos temporales. La diferencia principal con Internal Storage: el sistema tiene derecho a eliminar archivos de la caché sin previo aviso si el dispositivo tiene poco espacio libre. Por lo tanto, la aplicación nunca debe almacenar la única copia de datos importantes del usuario en la caché. La caché es óptima para imágenes descargadas, respuestas del servidor, recursos precompilados y cualquier otro dato que se pueda restaurar de forma remota o recrear mediante programación.
En Android, el directorio de caché se encuentra en /data/data/<package>/cache/ y es accesible a través de context.cacheDir. El tamaño de la caché no está limitado explícitamente, pero Google Play recomienda no superar los 100 MB, ya que las aplicaciones con una caché grande reciben reseñas negativas de los usuarios. En iOS, el directorio de caché se encuentra dentro del contenedor Sandbox en Library/Caches/ y es accesible a través de NSCachesDirectory. iOS puede eliminar archivos de Caches al restaurar el dispositivo desde una copia de seguridad o cuando hay una falta crítica de espacio; esto debe notificarse a los usuarios en la documentación de la aplicación.
Comprender qué datos se pueden colocar de forma segura en la caché y cuáles deben almacenarse en Internal Storage o Documents es una habilidad clave para el desarrollador. El uso incorrecto de la caché genera dos problemas opuestos: o la aplicación ocupa demasiado espacio (si el desarrollador almacena en la caché lo que debería estar en Documents) o el usuario pierde datos (si el desarrollador almacena en la caché lo que debería conservarse de forma permanente). Siga una regla simple: si los datos se pueden recuperar — caché; si la recuperación es imposible — Internal Storage o Documents.
Los diferentes tipos de datos tienen una velocidad de recreación y requisitos de espacio distintos. Comprender estas características ayuda al desarrollador a elegir correctamente qué archivos colocar en la caché y cuáles en el almacenamiento permanente.
El tipo más común de datos almacenados en caché son las imágenes descargadas de la red. Las librerías Glide, Picasso y Coil guardan automáticamente las imágenes descargadas en el directorio de caché de la aplicación. El tamaño típico de la caché de imágenes en aplicaciones sociales oscila entre 50 y 200 MB. El tamaño de la caché depende de la resolución de la pantalla del dispositivo y de la cantidad de contenido visualizado. Glide utiliza un almacenamiento en caché de dos niveles: primero verifica la caché L1 en RAM (algoritmo LRU), luego la caché L2 en disco. Esto garantiza una carga rápida de las imágenes visualizadas repetidamente sin una solicitud de red adicional. La configuración del tamaño máximo de la caché de disco a través de DiskCacheStrategy permite controlar el espacio ocupado: cuando se supera el límite, la librería elimina automáticamente los archivos menos utilizados.
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 ->
// write data to cache
}
}
Las respuestas de las solicitudes API se pueden almacenar en caché para acceso sin conexión y reducir la carga del servidor. OkHttp proporciona soporte integrado para el almacenamiento en caché a través de la clase Cache. Los encabezados de respuesta Cache-Control y ETag gestionan la política de caché: el servidor indica durante cuánto tiempo la respuesta se considera actual. Con una configuración adecuada, la caché de solicitudes de red puede reducir el tiempo de carga de datos entre un 60–80% en visitas repetidas y proporcionar funcionalidad básica de la aplicación sin conexión a internet. El tamaño de la caché de solicitudes de red rara vez supera los 10–20 MB, pero con un uso intensivo de la aplicación puede alcanzar los 50 MB. Configure el tamaño máximo de la caché a través del constructor OkHttpClient.Builder y verifique la vigencia de los datos almacenados en caché en cada inicio de la aplicación.
Las bases de datos SQLite pueden generar archivos temporales durante su funcionamiento: archivos WAL (Write-Ahead Log), registros de reversión y páginas de índice. Estos archivos se almacenan junto a la base de datos principal, pero para bases de datos temporales (por ejemplo, búsqueda de texto completo o análisis) se puede especificar su ubicación en el directorio de caché. Los programas de shader precompilados de OpenGL y Vulkan también se almacenan en caché en este directorio, lo que acelera la primera carga de escenas gráficas. En iOS, se recomienda NSCachesDirectory para almacenar datos precompilados de Core Data y archivos temporales de procesamiento de imágenes.
La limpieza de la caché puede ocurrir automáticamente (por el sistema) o manualmente (por el usuario o la aplicación). Comprender el comportamiento del sistema en diferentes escenarios es necesario para prevenir la pérdida de datos.
En Android, el sistema inicia el proceso de limpieza de la caché cuando el espacio libre en la partición /data cae por debajo de un umbral crítico (normalmente 500 MB). El proceso cacheflush analiza el tamaño de la caché de todas las aplicaciones instaladas y elimina los archivos menos utilizados, comenzando por los más antiguos. El usuario también puede limpiar manualmente la caché de todas las aplicaciones a través de la configuración del sistema: “Ajustes → Almacenamiento → Caché → Limpiar caché.” En iOS, la limpieza automática de Caches ocurre al restaurar el dispositivo desde una copia de seguridad: iOS no restaura el contenido de Library/Caches/. Además, iOS puede eliminar selectivamente archivos de Caches cuando se acaba el espacio libre, utilizando el mecanismo de almacenamiento purgable para datos aislados.
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)
}
El desarrollador puede implementar la limpieza programática de la caché a solicitud del usuario o según un horario. En Android, para limpiar la propia caché de la aplicación, basta con eliminar todos los archivos en context.cacheDir y context.externalCacheDir. En iOS, se puede limpiar el contenido de Library/Caches/, pero no elimine el directorio en sí, solo su contenido. Se recomienda mostrar al usuario el tamaño actual de la caché en la configuración de la aplicación junto con un botón “Limpiar caché” con confirmación. Según Google Play Console, las aplicaciones con un botón de limpieza de caché reciben un 22% menos de quejas sobre falta de espacio en comparación con las aplicaciones sin esta función. La limpieza de la caché debe ser segura: la aplicación debe manejar correctamente la situación en la que los archivos almacenados en caché se eliminan y recargarlos de forma transparente en el próximo acceso.
A pesar del mismo propósito, la implementación de los directorios de caché en Android e iOS tiene diferencias significativas. El desarrollador debe tenerlas en cuenta para el correcto funcionamiento de la aplicación en ambas plataformas.
| Característica | Android | iOS |
|---|---|---|
| Ruta predeterminada | /data/data/<package>/cache/ | Library/Caches/ |
| API de acceso | context.cacheDir | NSCachesDirectory |
| Caché externa | context.externalCacheDir | No disponible |
| Copia de seguridad | No se respalda | No se respalda |
| Limpieza del sistema | Cuando falta espacio | Al restaurar desde copia de seguridad y cuando falta espacio |
| Visibilidad para el usuario | En la configuración de la aplicación | Solo al conectar a un ordenador |
Android proporciona un directorio de caché externo separado a través de context.externalCacheDir — se encuentra en la tarjeta SD (si está instalada) y no se elimina al desinstalar la aplicación. Esto es conveniente para archivos multimedia grandes, pero crea el riesgo de dejar residuos en la tarjeta de memoria. iOS no tiene el concepto de caché externa: todos los archivos temporales se almacenan dentro del contenedor Sandbox y se eliminan garantizadamente al desinstalar la aplicación. En Android, la caché es visible para el usuario en la configuración de la aplicación y puede limpiarla manualmente. En iOS, la configuración del sistema no muestra el tamaño de la caché de aplicaciones individuales — el usuario solo puede limpiar la caché eliminando y reinstalando la aplicación, a menos que el desarrollador haya agregado un botón de limpieza en la interfaz.
Una diferencia importante es el comportamiento durante la restauración. En iOS, al restaurar desde una copia de seguridad de iTunes o iCloud, el directorio Caches no se restaura, ya que iOS asume que los datos almacenados en caché se recrearán en el primer inicio. En Android, al restaurar desde Google Drive, solo se respalda Internal Storage — la caché permanece vacía después de la restauración. En ambos casos, la aplicación debe funcionar correctamente con una caché vacía, sin mostrar errores al usuario ni perder funcionalidad.
La gestión adecuada de la caché de la aplicación es uno de los factores que influyen en la experiencia del usuario y la calificación de la aplicación. Las siguientes recomendaciones ayudarán a evitar problemas típicos y mejorar la satisfacción del usuario.
context.externalCacheDir puede devolver null si la tarjeta SD no está instalada o no está disponible. Siempre prevea un fallback a la caché internaSupervise regularmente el tamaño de la caché en los análisis de la aplicación. Integre el envío de la métrica del tamaño de la caché en Firebase Analytics o un sistema similar. Si el tamaño medio de la caché supera los 100 MB, optimice la estrategia de almacenamiento en caché: reduzca el TTL para datos de uso poco frecuente, implemente la compresión de imágenes antes del almacenamiento en caché (WebP en lugar de PNG, reduzca la calidad JPEG al 85%), utilice la paginación para la carga de contenido desde el servidor. Recuerde que los usuarios con dispositivos de 16–32 GB son especialmente sensibles al tamaño de la aplicación: cuando la caché alcanza los 200 MB, muchos usuarios comienzan a buscar una forma de limpiarla o simplemente eliminan la aplicación. Según una encuesta de Google, el 38% de los usuarios ha eliminado al menos una aplicación debido al crecimiento incontrolado de la caché y el espacio ocupado.
Preguntas Frecuentes
No, la limpieza de la caché solo elimina archivos temporales (imágenes guardadas, respuestas del servidor). Los datos del usuario (contraseñas, configuraciones, bases de datos) se almacenan en Internal Storage y no se ven afectados al limpiar la caché.
Google Play recomienda no superar los 100 MB. Para aplicaciones con contenido multimedia intensivo (redes sociales, mensajería) se permite hasta 200 MB siempre que se implemente una limpieza automática y se configure un límite a través de una caché discreta.
Sí, iOS puede eliminar archivos de Library/Caches cuando falta espacio o al restaurar desde una copia de seguridad. El sistema utiliza un mecanismo de almacenamiento purgable para la limpieza automática de datos no críticos.
cacheDir se encuentra en la memoria interna del dispositivo y se elimina al desinstalar la aplicación. externalCacheDir está ubicado en la tarjeta SD y puede permanecer después de la desinstalación — debe limpiarse manualmente mediante código en el primer inicio después de la reinstalación.
Librerías como Glide, Picasso y Coil utilizan un almacenamiento en caché de dos niveles: L1 — memoria RAM (caché LRU para acceso instantáneo), L2 — disco (directorio de caché de la aplicación). La caché de disco tiene un límite de tamaño configurable y una política de eliminación de archivos antiguos.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también