Interní paměť aplikace: co to je, způsoby ukládání dat a jak funguje ve vývoji

Autor: IT Sectr Publikováno: 2026-03-13 Doba čtení: 11 min

Interní paměť aplikace je vyhrazený prostor na zařízení, přístupný pouze konkrétní aplikaci prostřednictvím izolovaného úložiště. Podle Android Developers, 2026 každá aplikace získá vlastní sandboxový adresář, k němuž ostatní aplikace nemají přímý přístup. Tento přístup chrání data před neoprávněným čtením a zajišťuje stabilní provoz v multitaskingovém prostředí mobilních zařízení.

Hlavní body

  • Internal Storage — izolované úložiště každé aplikace, nepřístupné jiným programům
  • Sandboxový model zaručuje, že data jedné aplikace nemůže číst jiná bez zvláštních oprávnění
  • Android poskytuje Context.getFilesDir(), getCacheDir() a getDataDir() pro přístup k interní paměti
  • iOS používá NSDocumentDirectory a NSCachesDirectory v sandboxovém kontejneru aplikace
  • Automatické čištění při odinstalaci aplikace zaručuje úplné odstranění všech dat z interní paměti

Co je interní paměť aplikace?

Interní paměť aplikace je izolovaný adresář, který operační systém přidělí každé aplikaci při její instalaci. K tomuto adresáři nemají přístup jiné aplikace ani uživatel prostřednictvím běžných správců souborů. Systém zaručuje, že data v tomto adresáři budou při odinstalaci aplikace zcela smazána. Tento přístup tvoří základ bezpečnostního modelu mobilních operačních systémů a zabraňuje úniku důvěrných informací mezi programy.

Na rozdíl od externího úložiště (SD karty) je interní paměť vždy k dispozici a nevyžaduje kontrolu přítomnosti média. Rychlost čtení a zápisu do paměti NAND flash moderních zařízení dosahuje 800–900 MB/s sekvenčního čtení a 200–300 MB/s sekvenčního zápisu, což je srovnatelné s SATA SSD. Velikost přidělené oblasti závisí na celkové kapacitě zařízení a politice výrobce: u zařízení s 64 GB flash paměti aplikace získá 16–64 MB počátečního prostoru s možností rozšíření podle potřeby.

Architektura interního úložiště se liší na Androidu a iOS. Na Androidu každá aplikace získá adresář /data/data/<package_name>/, uvnitř kterého systém vytvoří podadresáře files/, cache/ a databases/. Na iOS aplikace pracuje v sandboxovém kontejneru s adresáři Documents/, Library/ a tmp/, z nichž každý má svůj vlastní účel a politiku zálohování.

Způsoby ukládání dat do interní paměti

Vývojáři mají k dispozici několik způsobů ukládání dat do interní paměti aplikace. Každá metoda řeší svůj úkol a je vhodná pro určitý typ dat. Výběr správného způsobu přímo ovlivňuje výkon aplikace, pohodlí vývoje a bezpečnost uživatelských dat.

Izolované souborové úložiště

Nejnižší úrovní je přímý zápis souborů do adresáře files. Aplikace může vytvářet libovolné soubory a adresáře ve svém sandboxu. Tato metoda je vhodná pro ukládání multimediálních souborů, uživatelských dokumentů a jakýchkoli binárních dat, která nevyžadují strukturovanou organizaci. Na Androidu se k adresáři přistupuje voláním Context.getFilesDir(), které vrací absolutní cestu k adresáři souborů aplikace. Na iOS plní podobnou funkci NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).

SharedPreferences a DataStore

Pro ukládání párů klíč-hodnota Android nabízí SharedPreferences a modernější DataStore založený na Kotlin korutinách a protokolu protobuf. SharedPreferences ukládá data do XML souboru v adresáři /data/data/<package>/shared_prefs/. Přes jednoduchost použití má SharedPreferences nevýhody: synchronní zápis může způsobovat zpoždění na UI vlákně a absence typové bezpečnosti zvyšuje riziko chyb. DataStore tyto problémy řeší poskytováním asynchronního API založeného na Flow a plnou podporou typů prostřednictvím protobuf schémat.

Databáze SQLite a Room

Pro strukturovaná data s relačními vazbami je optimální volbou SQLite nebo obálka Room. Databáze je uložena v jediném souboru v adresáři databases/ a podporuje plnou syntaxi SQL. Room je oficiální knihovna Jetpack, která poskytuje typově bezpečné API, automatickou migraci schémat a podporu korutin. Velikost databáze může dosáhnout několika gigabajtů bez výrazné ztráty výkonu při správném indexování. SQLite na mobilních zařízeních zpracuje až 50 000 zápisových operací za sekundu na moderním špičkovém procesoru.

EncryptedSharedPreferences

Pro ukládání důvěrných dat, jako jsou autentizační tokeny a šifrovací klíče, Android poskytuje EncryptedSharedPreferences. Tato obálka nad standardními SharedPreferences automaticky šifruje klíče i hodnoty pomocí AES256-GCM-None. Šifrování probíhá na úrovni souboru před zápisem na disk, takže i při fyzickém přístupu k zařízení útočník nemůže obsah přečíst. EncryptedSharedPreferences je součástí knihovny AndroidX Security, která také obsahuje EncryptedFile pro šifrování celých souborů.

Jak pracovat s interní pamětí na Androidu

Android SDK poskytuje sadu metod pro práci s interní pamětí prostřednictvím třídy Context. Každá metoda vrací cestu k určitému systémovému adresáři v sandboxu aplikace. Podívejme se na základní operace zápisu a čtení souborů na příkladu v Kotlinu.

Přístup k filesDir přes Context

Hlavní metoda pro získání cesty k internímu adresáři souborů je context.filesDir. Vrací objekt File ukazující na adresář /data/data/<package>/files/. Při prvním volání systém automaticky vytvoří všechny potřebné nadřazené adresáře. Velikost souborů v interní paměti není explicitně omezena, ale celkový objem dat by neměl překročit dostupný prostor oddílu /data, který obvykle tvoří 60–80 % celkové flash paměti zařízení.

kotlin
val context = getApplicationContext()
val file = File(context.filesDir, "notes.txt")

file.writeText("Obsah poznámky")

val content = file.readText()
println("Přečteno: $content")

Metody writeText a readText jsou rozšiřující funkce standardní knihovny Kotlin. Automaticky spravují otevírání a zavírání proudů, což vylučuje úniky paměti. Pro binární data použijte writeBytes a readBytes, které nevyžadují kódování a pracují s poli ByteArray. Při práci s velkými soubory se doporučuje používat bufferované proudy: BufferedReader a BufferedWriter pro text, BufferedInputStream a BufferedOutputStream pro binární data.

Vytváření podadresářů v interní paměti

Pro organizaci souborů do hierarchie vytvářejte podadresáře uvnitř filesDir. To pomáhá strukturovat data podle typu: obrázky, dokumenty, exportní soubory. Metoda mkdirs() vytvoří všechny chybějící adresáře v cestě včetně vnořených. Ujistěte se, že operace vytvoření byla úspěšná — metoda vrací true pouze při vytvoření nových adresářů. Chyba vytvoření nejčastěji souvisí s nedostatkem místa na oddílu /data nebo vyčerpáním inod souborového systému.

kotlin
val imagesDir = File(context.filesDir, "images")
if (imagesDir.mkdirs()) {
    println("Adresář vytvořen")
}

val imageFile = File(imagesDir, "photo.jpg")
imageFile.writeBytes(byteArray)

Pro kontrolu dostupného místa před zápisem velkých souborů použijte File.getFreeSpace() nebo File.getUsableSpace(). Druhá metoda vrací počet bajtů dostupných aktuální aplikaci s ohledem na bezpečnostní kvóty — je přesnější v kontextu víceuživatelských zařízení. Pokud je dostupné místo menší než očekávaná velikost souboru, zobrazte uživateli zprávu a navrhněte uvolnění místa v nastavení zařízení.

Jak pracovat s interní pamětí na iOS

Na iOS každá aplikace pracuje v izolovaném sandboxovém kontejneru. Systém neposkytuje API pro opuštění jeho hranic bez zvláštních oprávnění. Hlavním nástrojem pro práci se souborovým systémem je třída FileManager z frameworku Foundation. Sandboxový kontejner obsahuje několik standardních adresářů, z nichž každý má svou vlastní politiku zálohování.

Přístup k adresáři Documents přes FileManager

Adresář Documents je určen pro uživatelská data, která by měla přetrvat mezi spuštěními aplikace a být obnovena ze zálohy. iOS automaticky zahrnuje tento adresář do zálohování na iCloud a iTunes. Metoda urls(for:in:) vrací pole URL adres požadovaného adresáře — první prvek pole je primární.

swift
let fm = FileManager.default
let docs = fm.urls(
    for: .documentDirectory,
    in: .userDomainMask
).first!

let fileURL = docs.appendingPathComponent("data.plist")
try data.write(to: fileURL)

FileManager podporuje plnou sadu souborových operací: vytváření, kopírování, přesouvání, mazání a přejmenovávání. Každá operace může vyvolat chybu, proto je třeba všechna volání obalit do konstrukce do-catch. Zvláštní pozornost věnujte mazání souborů — operace je nevratná a data po removeItem(at:) nelze obnovit bez předchozí zálohy.

Správa výjimek ze zálohování

Ne všechna data v sandboxovém kontejneru by se měla dostat do zálohy iCloud. Například cache stažených obrázků nebo dočasné soubory zpracování není třeba obnovovat — budou znovu vytvořeny při příštím použití. Pro vyloučení adresáře nebo souboru ze zálohování nastavte atribut isExcludedFromBackup na hodnotu true. Apple doporučuje vždy vyloučit ze zálohy data, která lze obnovit vzdáleně, aby se minimalizoval objem úložiště iCloud a zkrátila doba obnovy.

swift
var cacheURL = fm.urls(
    for: .cachesDirectory,
    in: .userDomainMask
).first!
cacheURL.hasExcludedFromBackupKey = true

var values = URLResourceValues()
values.isExcludedFromBackup = true
try cacheURL.setResourceValues(values)

Rozdíly mezi interní pamětí, cache a externím úložištěm

Každý typ úložiště na mobilním zařízení má svůj účel a pravidla použití. Pochopení těchto rozdílů pomáhá vývojáři vybrat správné místo pro každý typ dat. Níže je uvedeno srovnání tří hlavních typů úložiště dostupných aplikaci.

CharakteristikaInternal StorageCache DirectoryExternal Storage
Viditelnost pro jiné aplikaceSkrytáSkrytáPřístupná
Smazání při odinstalaci aplikaceÚplnéÚplnéZávisí na umístění
ZálohováníNa Androidu ne, na iOS ano (Documents)NePouze při synchronizaci
Dostupnost bez médiaVždyVždyVyžaduje SD kartu
Riziko ztráty datMinimálníVysokéStřední
Doporučená velikost souborůDo 100 MBDo 50 MBLibovolná

Interní paměť je optimální pro ukládání konfigurací aplikace, databázových souborů a uživatelských dokumentů, které by neměly být přístupné jiným programům. Adresář cache je určen pro dočasné soubory, které lze při příštím použití znovu vytvořit: stažené obrázky, odpovědi API, mezilehlá data zpracování. Externí úložiště je nejvhodnější pro velké multimediální soubory (fotografie, videa, hudba) a data, která chce uživatel sdílet s jinými aplikacemi prostřednictvím společného přístupu.

Výběr typu úložiště také ovlivňuje hodnocení aplikace v Google Play a App Store. Aplikace, které ukládají velké objemy dat do interní paměti bez čištění, získávají negativní recenze: uživatelé si stěžují na nedostatek místa. Podle průzkumu App Annie 62 % uživatelů odstraní aplikaci, pokud zabírá více než 500 MB interní paměti zařízení bez možnosti čištění.

Doporučení pro používání interní paměti

Správná správa interní paměti aplikace zvyšuje výkon, bezpečnost a uživatelský zážitek. Následující doporučení vycházejí z oficiální dokumentace Android a iOS a také z praktických zkušeností s vývojem aplikací s miliony instalací.

  • Minimalizujte objem ukládaných dat. Používejte interní paměť pouze pro kriticky důležité soubory, ostatní umístěte do cache nebo na externí úložiště
  • Pravidelně čistěte dočasné soubory. Při každém spuštění zkontrolujte adresář cache a odstraňte soubory starší 24 hodin — to snižuje zátěž systému a zabraňuje přeplnění oddílu /data
  • Šifrujte důvěrná data pomocí EncryptedSharedPreferences nebo EncryptedFile z knihovny AndroidX Security. Ukládání tokenů a hesel v otevřené podobě je běžná zranitelnost, kterou zneužívají trojské koně s root přístupem
  • Používejte migraci při aktualizaci struktury souborů. Při vydání nové verze aplikace zkontrolujte existenci starých souborů a přeneste je do nových adresářů před odstraněním starých

Zvláštní pozornost věnujte testování okrajových případů. Otestujte chování aplikace při přeplnění interní paměti, při náhlém přerušení zápisu (pád aplikace, hovor) a při obnově ze zálohy iOS. V každém z těchto scénářů musí data zůstat konzistentní nebo být obnovena do posledního stabilního stavu. Používejte transakční soubory: zapisujte data do dočasného souboru a poté je atomicky přejmenujte na cílový. Tím zabráníte čtení poškozených dat při selhání zápisu.

Nezapomínejte na kontrolu uživatelem. V nastavení aplikace poskytněte možnost čištění dočasných dat a zobrazení využívaného objemu interní paměti. Podle Google Play Console získávají aplikace s touto funkcí o 18 % více pozitivních recenzí v kategorii „Výkon“.

Často kladené dotazy

Co se stane s Internal Storage po odinstalaci aplikace?

Všechna data z interní paměti aplikace jsou zcela smazána. Operační systém zaručuje absenci zbytkových souborů včetně databází, nastavení a dočasných souborů. Data na externím úložišti přitom mohou zůstat zachována.

Může jiná aplikace číst mé soubory z Internal Storage?

Bez root přístupu k zařízení nemohou jiné aplikace číst soubory z Internal Storage jiné aplikace. Na Androidu jsou k tomu vyžadována oprávnění superuživatele, na iOS je izolace zajištěna na úrovni jádra prostřednictvím Sandboxu.

Jaký maximální objem dat lze uložit do interní paměti?

Neexistuje žádný explicitní limit, ale celkový objem je omezen volným místem na oddílu /data. Doporučuje se nepřekračovat 100 MB na aplikaci — větší objemy je lepší umístit na externí úložiště nebo do cloudu.

Jaký je rozdíl mezi filesDir a cacheDir na Androidu?

filesDir je určen pro trvalá data aplikace a systém jej bez potřeby nemaže. cacheDir je pro dočasné soubory, které systém může smazat při nedostatku paměti. Systém nezaručuje zachování cacheDir.

Jak přenést data z Internal Storage na SD kartu?

Přímé kopírování z Internal Storage na SD kartu je zakázáno bezpečnostní politikou. Použijte MediaStore API na Androidu 10+ nebo SAF (Storage Access Framework) pro vytvoření kopií dat ve sdíleném přístupu se souhlasem uživatele.

Shrnutí

  • Internal Storage — izolovaný adresář každé aplikace, chráněný před přístupem jiných programů a uživatele
  • Sandboxová architektura na Androidu a iOS zaručuje, že data různých aplikací se nepřekrývají a nelze je číst bez root přístupu
  • Výběr způsobu uložení závisí na typu dat: soubory — přes filesDir, nastavení — přes DataStore, strukturovaná data — přes Room
  • iOS Sandbox zahrnuje politiku zálohování, kterou je třeba řídit prostřednictvím atributu isExcludedFromBackup pro nekritická data
  • Rozdíl oproti cache v záruce uchování: Internal Storage není systémem mazán, na rozdíl od cacheDir, který může být při nedostatku paměti vyčištěn
  • Doporučený objem dat v interní paměti — do 100 MB. Větší soubory by měly být umístěny na externím úložišti nebo v cloudové službě
  • Uživatelská kontrola využívaného prostoru a možnost čištění dat zvyšují důvěru a hodnocení aplikace v obchodech

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í.

Prodiskutovat projekt

Přečtěte si také