Кеш директория на приложението — какво е, предназначение и как да изчиствате в мобилната разработка

Автор: IT Sectr Публикувано: 2026-03-13 Време за четене: 10 мин

Кеш директорията на приложението е временно хранилище за данни, които могат да бъдат повторно създадени при следващото използване. Според Android Developers, 2026, системата може да изтрие файлове от тази директория без предупреждение при недостиг на памет, затова приложението не трябва да разчита на запазеността на кеша за критично важни данни. Правилното използване на кеш директорията намалява обема на заетото пространство и ускорява зареждането на съдържание.

Основни моменти

  • Cache Directory — временно хранилище за файлове, които могат да бъдат възстановени, не е предназначено за постоянни данни
  • Android предоставя context.cacheDir и context.externalCacheDir за съхранение на кеш на вътрешната и външната памет
  • iOS използва NSCachesDirectory, който автоматично се изключва от iCloud резервното копиране
  • Системата може да изчисти кеша по всяко време — критично важни данни съхранявайте в Internal Storage
  • Ръчно изчистване на кеша чрез настройките на приложението повишава доверието на потребителите и подобрява отзивите

Какво е кеш директория на приложението?

Кеш директорията е специална директория във вътрешната (или външната) памет на приложението, предназначена за временни файлове. Основната разлика от Internal Storage: системата има право да изтрива файлове от кеша без предупреждение, ако устройството няма достатъчно свободно място. Затова приложението никога не трябва да съхранява единственото копие на важни потребителски данни в кеша. Кешът е оптимален за изтеглени изображения, отговори от сървър, прекомпилирани ресурси и всякакви други данни, които могат да бъдат възстановени отдалечено или пресъздадени програмно.

На Android кеш директорията се намира на път /data/data/<package>/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 кеш в оперативната памет (LRU алгоритъм), след това L2 кеш на диска. Това осигурява бързо зареждане на повторно преглеждани изображения без допълнителни мрежови заявки. Настройването на максималния размер на дисков кеш чрез DiskCacheStrategy позволява контролиране на заетото пространство: при надвишаване на лимита библиотеката автоматично изтрива най-рядко използваните файлове.

kotlin
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), журнали за отмяна и индексни страници. Тези файлове се съхраняват до основната база данни, но за временни бази данни (например за пълнотекстово търсене или анализи) може да се посочи разположение в кеш директорията. Прекомпилираните шейдър програми за OpenGL и Vulkan също се кешират в тази директория, което ускорява първото зареждане на графични сцени. На iOS NSCachesDirectory се препоръчва за съхранение на прекомпилирани Core Data данни и временни файлове за обработка на изображения.

Как работи изчистването на кеша на Android и iOS

Изчистването на кеша може да става автоматично (от системата) или ръчно (от потребителя или приложението). Разбирането на поведението на системата в различни сценарии е необходимо за предотвратяване на загуба на данни.

Автоматично изчистване от системата

На Android системата стартира процес на изчистване на кеша, когато свободното място на дяла /data падне под критичен праг (обикновено 500 MB). Процесът cacheflush анализира размера на кеша на всички инсталирани приложения и изтрива най-рядко използваните файлове, започвайки от най-старите. Потребителят може също ръчно да изчисти кеша на всички приложения чрез системните настройки: „Настройки → Съхранение → Кеш → Изчистване на кеша“. На iOS автоматично изчистване на Caches се случва при възстановяване на устройството от резервно копие — iOS не възстановява съдържанието на Library/Caches/. Освен това iOS може селективно да изтрива файлове от Caches, когато свободното място на устройството се изчерпва, използвайки механизъм за почистваемо хранилище за изолирани данни.

swift
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% по-малко оплаквания за липса на място в сравнение с приложения без такава функция. Изчистването на кеша трябва да бъде безопасно: приложението трябва правилно да обработва ситуацията, когато кешираните файлове са изтрити, и прозрачно да ги презарежда при следващото обръщение.

Разлики между cacheDir на Android и iOS

Въпреки еднаквото предназначение, реализацията на кеш директориите на Android и iOS има съществени разлики. Разработчикът трябва да ги вземе предвид за коректната работа на приложението на двете платформи.

ХарактеристикаAndroidiOS
Път по подразбиране/data/data/<package>/cache/Library/Caches/
API за достъпcontext.cacheDirNSCachesDirectory
Външен кешcontext.externalCacheDirЛипсва
Резервно копиранеНе се архивираНе се архивира
Системно изчистванеПри недостиг на мястоПри възстановяване от резервно копие и недостиг на място
Видимост за потребителяВ настройките на приложениетоСамо при свързване към компютър

Android предоставя отделна директория за външен кеш чрез context.externalCacheDir — тя се намира на SD картата (ако е инсталирана) и не се изтрива при деинсталиране на приложението. Това е удобно за големи медийни файлове, но създава риск от оставяне на боклук на картата с памет. iOS няма концепция за външен кеш: всички временни файлове се съхраняват вътре в Sandbox контейнера и гарантирано се изтриват при деинсталация. На Android кешът е видим за потребителя в настройките на приложението и той може да го изчисти ръчно. На iOS системните настройки не показват размера на кеша на отделните приложения — потребителят може да изчисти кеша само чрез изтриване и повторно инсталиране на приложението, ако разработчикът не е добавил бутон за изчистване в интерфейса.

Важна разлика е поведението при възстановяване. На iOS при възстановяване от iTunes или iCloud резервно копие директорията Caches не се възстановява, тъй като iOS счита, че кешираните данни ще бъдат пресъздадени при първото стартиране. На Android при възстановяване от Google Drive се архивира само Internal Storage — кешът остава празен след възстановяване. И в двата случая приложението трябва да работи коректно с празен кеш, без да показва грешки на потребителя и без да губи функционалност.

Препоръки за управление на кеша

Доброто управление на кеша на приложението е един от факторите, влияещи върху потребителското изживяване и рейтинга на приложението. Следващите препоръки ще помогнат да избегнете типични проблеми и да повишите удовлетвореността на потребителите.

  • Задайте лимит на размера на кеша. Използвайте DiskLruCache или подобни библиотеки с посочване на максимален обем в мегабайти. При надвишаване на лимита библиотеката автоматично изтрива най-рядко използваните файлове
  • Реализирайте бутон за изчистване на кеша в настройките на приложението. Показвайте текущия размер на кеша (във формат „12,5 MB“) и изисквайте потвърждение преди изчистване. След изчистване обновете показания размер
  • Не съхранявайте в кеша файлове, които не могат да бъдат възстановени. Ако данните са критични за работата на приложението, съхранявайте ги в Internal Storage (Android) или Documents (iOS), а в кеша поставяйте само копие за бърз достъп
  • Проверявайте наличността на външния кеш преди запис. На Android context.externalCacheDir може да върне null, ако SD картата не е инсталирана или недостъпна. Винаги предвиждайте резервен вариант с вътрешен кеш
  • Използвайте политика за остаряване (TTL) за кеширани данни. Не съхранявайте файлове по-дълго от необходимото: за изображения — 24–48 часа, за API отговори — от 5 минути до 1 час в зависимост от честотата на обновяване на данните

Редовно мониторирайте размера на кеша в анализите на приложението. Интегрирайте изпращане на метрика за размера на кеша към 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 автоматично кеша на приложението?

Да, iOS може да изтрива файлове от Library/Caches при недостиг на място или възстановяване от резервно копие. Системата използва механизъм за почистваемо хранилище за автоматично изчистване на некритични данни.

Каква е разликата между cacheDir и externalCacheDir на Android?

cacheDir се намира във вътрешната памет на устройството и се изтрива при деинсталиране на приложението. externalCacheDir се намира на SD картата и може да остане след деинсталиране — трябва да се изчисти ръчно чрез код при първото стартиране след преинсталиране.

Как библиотеките за зареждане на изображения управляват кеша?

Библиотеки като Glide, Picasso и Coil използват двустепенно кеширане: L1 — оперативна памет (LRU кеш за моментален достъп), L2 — диск (кеш директория на приложението). Дисковият кеш има конфигурируем лимит на размера и политика за изтриване на стари файлове.

Обобщение

  • Cache Directory — временно хранилище за възстановими данни, което системата може да изчисти без предупреждение при недостиг на място
  • Android предоставя cacheDir (вътрешна памет) и externalCacheDir (SD карта) — и двете директории не се архивират и могат да бъдат изчистени от системата
  • iOS използва Library/Caches, автоматично изключена от iCloud и iTunes резервно копиране
  • Типове кеширани данни — изображения (L2 кеш на библиотеки), API отговори (OkHttp Cache), прекомпилирани ресурси (шейдъри, временни бази данни)
  • Лимит на размера на кеша — не повече от 100–200 MB с автоматично изчистване на стари файлове чрез DiskLruCache или подобен механизъм
  • Бутон за изчистване на кеша в настройките на приложението намалява броя на негативните отзиви и повишава доверието на потребителите
  • Критично важни данни никога не съхранявайте в кеша — използвайте Internal Storage (Android) или Documents Directory (iOS) за постоянно съхранение

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също