„Adresář mezipaměti aplikace“ je dočasné úložiště dat, která mohou být při příštím použití znovu vytvořena. Podle Android Developers, 2026 může systém při nedostatku paměti bez varování odstranit soubory z tohoto adresáře, proto by aplikace neměla spoléhat na zachování mezipaměti pro kriticky důležitá data. Správné používání adresáře mezipaměti snižuje objem zabraného místa a urychluje načítání obsahu.
Hlavní body
context.cacheDir a context.externalCacheDir pro ukládání mezipaměti na vnitřní a vnější pamětiNSCachesDirectory, které je automaticky vyloučeno ze zálohování iCloudAdresář mezipaměti je speciální adresář ve vnitřní (nebo vnější) paměti aplikace určený pro dočasné soubory. Hlavní rozdíl oproti Internal Storage: systém má právo mazat soubory z mezipaměti bez upozornění, pokud zařízení nemá dostatek volného místa. Aplikace by proto nikdy neměla v mezipaměti uchovávat jedinou kopii důležitých uživatelských dat. Mezipaměť je optimální pro stažené obrázky, odpovědi serveru, předkompilované zdroje a jakákoli jiná data, která lze vzdáleně obnovit nebo programově znovu vytvořit.
Na Androidu se adresář mezipaměti nachází v cestě /data/data/<package>/cache/ a je přístupný přes context.cacheDir. Velikost mezipaměti není explicitně omezena, ale Google Play doporučuje nepřekračovat 100 MB, protože aplikace s velkou mezipamětí získávají negativní hodnocení uživatelů. Na iOS se adresář mezipaměti nachází uvnitř Sandbox kontejneru v cestě Library/Caches/ a je přístupný přes NSCachesDirectory. iOS může odstranit soubory z Caches při obnově zařízení ze zálohy nebo při kritickém nedostatku místa — o tom je třeba informovat uživatele v dokumentaci aplikace.
Porozumění tomu, která data lze bezpečně umístit do mezipaměti a která by měla být uložena v Internal Storage nebo Documents, je klíčovou dovedností vývojáře. Nesprávné používání mezipaměti vede ke dvěma protichůdným problémům: buď aplikace zabírá příliš mnoho místa (pokud vývojář ukládá do mezipaměti to, co by mělo být v Documents), nebo uživatel ztrácí data (pokud vývojář ukládá do mezipaměti to, co by mělo být trvale uchováno). Dodržujte jednoduché pravidlo: pokud lze data obnovit — mezipaměť, pokud obnova není možná — Internal Storage nebo Documents.
Různé typy dat mají různou rychlost znovuvytvoření a požadavky na objem. Porozumění těmto charakteristikám pomáhá vývojáři správně vybrat, které soubory umístit do mezipaměti a které do trvalého úložiště.
Nejčastější typ dat ukládaných do mezipaměti — obrázky stažené ze sítě. Knihovny Glide, Picasso a Coil automaticky ukládají stažené obrázky do adresáře mezipaměti aplikace. Typický objem mezipaměti obrázků v sociálních aplikacích je 50 až 200 MB. Velikost mezipaměti závisí na rozlišení obrazovky zařízení a množství prohlíženého obsahu. Glide používá dvouúrovňové ukládání do mezipaměti: nejprve zkontroluje L1 mezipaměť v operační paměti (LRU algoritmus), poté L2 mezipaměť na disku. To zajišťuje rychlé načítání znovu prohlížených obrázků bez opakovaného požadavku přes síť. Nastavení maximální velikosti diskové mezipaměti přes DiskCacheStrategy umožňuje kontrolovat zabrané místo: při překročení limitu knihovna automaticky odstraní nejméně používané soubory.
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 ->
// zápis dat do mezipaměti
}
}
Odpovědi API požadavků lze ukládat do mezipaměti pro offline přístup a snížení zátěže serveru. OkHttp poskytuje vestavěnou podporu ukládání do mezipaměti přes třídu Cache. Hlavičky odpovědí Cache-Control a ETag řídí politiku mezipaměti: server určuje, jak dlouho je odpověď považována za platnou. Při správném nastavení může mezipaměť síťových požadavků snížit dobu načítání dat o 60-80% při opakovaných návštěvách a zajistit základní funkčnost aplikace bez internetového připojení. Velikost mezipaměti síťových požadavků zřídka přesahuje 10-20 MB, ale při aktivním používání aplikace může dosáhnout 50 MB. Nastavte maximální velikost mezipaměti přes konstruktor OkHttpClient.Builder a kontrolujte platnost dat v mezipaměti při každém spuštění aplikace.
Databáze SQLite mohou během provozu vytvářet dočasné soubory: WAL soubory (Write-Ahead Log), rollback logy a indexové stránky. Tyto soubory jsou uloženy vedle hlavní databáze, ale pro dočasné databáze (např. fulltextové vyhledávání nebo analytiku) lze určit umístění v adresáři mezipaměti. Předkompilované shader programy OpenGL a Vulkan jsou také ukládány do mezipaměti v tomto adresáři, což urychluje první načítání grafických scén. Na iOS je NSCachesDirectory doporučeno pro ukládání předkompilovaných dat Core Data a dočasných souborů zpracování obrázků.
Čištění mezipaměti může probíhat automaticky (systémem) nebo ručně (uživatelem nebo aplikací). Porozumění chování systému v různých scénářích je nezbytné pro zabránění ztrátě dat.
Na Androidu systém spouští proces čištění mezipaměti, když objem volného místa na oddílu /data klesne pod kritickou hranici (obvykle 500 MB). Proces cacheflush analyzuje velikost mezipaměti všech nainstalovaných aplikací a odstraňuje nejméně používané soubory, počínaje nejstaršími. Uživatel může také ručně vyčistit mezipaměť všech aplikací přes nastavení systému: „Nastavení → Úložiště → Mezipaměť → Vyčistit mezipaměť“. Na iOS dochází k automatickému čištění Caches při obnově zařízení ze zálohy — iOS neobnovuje obsah Library/Caches/. Kromě toho může iOS selektivně odstraňovat soubory z Caches, když dojde volné místo na zařízení, pomocí mechanismu purgeable storage pro izolovaná data.
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)
}
Vývojář může implementovat programové čištění mezipaměti na žádost uživatele nebo podle plánu. Na Androidu pro vyčištění vlastní mezipaměti stačí odstranit všechny soubory v context.cacheDir a context.externalCacheDir. Na iOS lze vyčistit obsah Library/Caches/, ale neodstraňujte samotný adresář — pouze jeho obsah. Doporučuje se zobrazovat uživateli aktuální velikost mezipaměti v nastavení aplikace a tlačítko „Vyčistit mezipaměť“ s potvrzením. Podle údajů Google Play Console dostávají aplikace s tlačítkem pro čištění mezipaměti o 22% méně stížností na nedostatek místa ve srovnání s aplikacemi bez této funkce. Čištění mezipaměti by mělo být bezpečné: aplikace musí správně zpracovat situaci, kdy jsou soubory v mezipaměti odstraněny, a transparentně je znovu načíst při příštím přístupu.
Navzdory stejnému účelu má implementace adresářů mezipaměti na Androidu a iOS významné rozdíly. Vývojář je musí zohlednit pro správnou funkčnost aplikace na obou platformách.
| Charakteristika | Android | iOS |
|---|---|---|
| Výchozí cesta | /data/data/<package>/cache/ | Library/Caches/ |
| API přístupu | context.cacheDir | NSCachesDirectory |
| Externí mezipaměť | context.externalCacheDir | Neexistuje |
| Zálohování | Nezálohuje se | Nezálohuje se |
| Systémové čištění | Při nedostatku místa | Při obnově ze zálohy a nedostatku místa |
| Viditelnost pro uživatele | V nastavení aplikace | Pouze při připojení k počítači |
Android poskytuje samostatný adresář externí mezipaměti přes context.externalCacheDir — nachází se na SD kartě (pokud je nainstalována) a při odinstalaci aplikace se nemaže. To je vhodné pro velké mediální soubory, ale vytváří riziko zanechání nepořádku na paměťové kartě. iOS nemá koncepci externí mezipaměti: všechny dočasné soubory jsou uloženy uvnitř Sandbox kontejneru a při odinstalaci jsou garantovaně smazány. Na Androidu je mezipaměť viditelná uživateli v nastavení aplikace a může ji ručně vyčistit. Na iOS systémová nastavení nezobrazují velikost mezipaměti jednotlivých aplikací — uživatel může vyčistit mezipaměť pouze odstraněním a novou instalací aplikace, pokud vývojář nepřidal tlačítko čištění do rozhraní.
Důležitý rozdíl — chování při obnově. Na iOS při obnově ze zálohy iTunes nebo iCloud se adresář Caches neobnovuje, protože iOS předpokládá, že data v mezipaměti budou znovu vytvořena při prvním spuštění. Na Androidu se při obnově z Google Drive zálohuje pouze Internal Storage — mezipaměť zůstává po obnově prázdná. V obou případech musí aplikace správně fungovat s prázdnou mezipamětí, aniž by uživateli zobrazovala chyby nebo ztrácela funkčnost.
Správná správa mezipaměti aplikace je jedním z faktorů ovlivňujících uživatelský zážitek a hodnocení aplikace. Následující doporučení pomohou vyhnout se typickým problémům a zvýšit spokojenost uživatelů.
context.externalCacheDir vrátit null, pokud SD karta není nainstalována nebo není dostupná. Vždy počítejte s fallbackem na interní mezipaměťPravidelně sledujte velikost mezipaměti v analytice aplikace. Integrujte odesílání metriky velikosti mezipaměti do Firebase Analytics nebo podobného systému. Pokud průměrná velikost mezipaměti přesahuje 100 MB, optimalizujte strategii ukládání do mezipaměti: snižte TTL pro zřídka používaná data, implementujte kompresi obrázků před ukládáním do mezipaměti (WebP místo PNG, snížení kvality JPEG na 85%), používejte stránkování pro načítání obsahu ze serveru. Pamatujte, že uživatelé se zařízeními o kapacitě 16-32 GB jsou obzvláště citliví na velikost aplikace: při dosažení 200 MB mezipaměti mnoho uživatelů začíná hledat způsob čištění nebo jednoduše aplikaci odinstaluje. Podle průzkumu Google 38% uživatelů odstranilo alespoň jednu aplikaci kvůli nekontrolovanému růstu mezipaměti a zabranému místu.
Často kladené otázky
Ne, čištění mezipaměti odstraňuje pouze dočasné soubory (uložené obrázky, odpovědi serveru). Uživatelská data (hesla, nastavení, databáze) jsou uložena v Internal Storage a čištění mezipaměti se jich nedotkne.
Google Play doporučuje nepřekračovat 100 MB. Pro aplikace s intenzivním mediálním obsahem (sociální sítě, messengery) je přípustné až 200 MB za předpokladu implementace automatického čištění a nastavení limitu prostřednictvím diskrétní mezipaměti.
Ano, iOS může odstranit soubory z Library/Caches při nedostatku místa nebo obnově ze zálohy. Systém používá mechanismus purgeable storage pro automatické čištění nekritických dat.
cacheDir se nachází ve vnitřní paměti zařízení a při odinstalaci aplikace se smaže. externalCacheDir je umístěn na SD kartě a může po odinstalaci zůstat — je třeba jej ručně vyčistit pomocí kódu při prvním spuštění po přeinstalaci.
Knihovny jako Glide, Picasso a Coil používají dvouúrovňové ukládání do mezipaměti: L1 — operační paměť (LRU mezipaměť pro okamžitý přístup), L2 — disk (adresář mezipaměti aplikace). Disková mezipaměť má nastavitelný limit velikosti a politiku odstraňování starých souborů.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také