Interne opslag van de app: wat het is, manieren van gegevensopslag en hoe het werkt in ontwikkeling

Auteur: IT Sectr Gepubliceerd: 2026-03-13 Leestijd: 11 min

Interne opslag van de app is een toegewezen ruimte op het apparaat die alleen toegankelijk is voor de specifieke app via geïsoleerde opslag. Volgens Android Developers, 2026 krijgt elke app een eigen sandbox-directory waar andere apps geen directe toegang toe hebben. Deze benadering beschermt gegevens tegen ongeautoriseerd lezen en zorgt voor stabiele werking in de multitasking-omgeving van mobiele apparaten.

Belangrijkste punten

  • Internal Storage is de geïsoleerde opslag van elke app, ontoegankelijk voor andere programma's
  • Sandbox-model garandeert dat gegevens van de ene app niet door een andere kunnen worden gelezen zonder speciale machtigingen
  • Android biedt Context.getFilesDir(), getCacheDir() en getDataDir() voor toegang tot interne opslag
  • iOS gebruikt NSDocumentDirectory en NSCachesDirectory in de Sandbox-container van de app
  • Automatische opschoning bij verwijderen van de app garandeert volledige verwijdering van alle gegevens uit de interne opslag

Wat is interne opslag van de app?

Interne opslag van de app is een geïsoleerde directory die het besturingssysteem bij installatie aan elke app toewijst. Andere apps en de gebruiker via standaard bestandsbeheerders hebben geen toegang tot deze directory. Het systeem garandeert dat gegevens in deze directory volledig worden verwijderd bij deïnstallatie van de app. Deze benadering vormt de basis van het beveiligingsmodel van mobiele besturingssystemen, waardoor lekkage van vertrouwelijke informatie tussen programma's wordt voorkomen.

In tegenstelling tot externe opslag (SD-kaart) is interne opslag altijd beschikbaar en vereist geen controle op aanwezigheid van de drager. Lees- en schrijfsnelheid in NAND-flashgeheugen van moderne apparaten bereikt 800–900 MB/s sequentieel lezen en 200–300 MB/s sequentieel schrijven, vergelijkbaar met SATA SSD. De grootte van het toegewezen gebied hangt af van de totale capaciteit van het apparaat en het beleid van de fabrikant: op apparaten met 64 GB flashgeheugen krijgt de app 16 tot 64 MB initiële ruimte met de mogelijkheid tot uitbreiding indien nodig.

De architectuur van de interne opslag verschilt op Android en iOS. Op Android krijgt elke app een directory /data/data/<package_name>/, waarbinnen het systeem subdirectories files/, cache/ en databases/ aanmaakt. Op iOS werkt de app in een Sandbox-container met directories Documents/, Library/ en tmp/, elk met hun eigen doel en back-upbeleid.

Manieren van gegevensopslag in de interne opslag

Ontwikkelaars hebben verschillende manieren om gegevens op te slaan in de interne opslag van de app. Elke methode lost zijn eigen taak op en is geschikt voor een bepaald type gegevens. De juiste keuze van methode heeft directe invloed op de prestaties van de app, het ontwikkelgemak en de beveiliging van gebruikersgegevens.

Geïsoleerde bestandsopslag

De meest basale methode is het direct schrijven van bestanden naar de files-directory. De app kan alle bestanden en directories binnen zijn sandbox creëren. Deze methode is geschikt voor het opslaan van mediabestanden, gebruikersdocumenten en alle binaire gegevens die geen gestructureerde organisatie vereisen. Op Android wordt toegang tot de directory verkregen via de aanroep Context.getFilesDir(), die het absolute pad naar de bestandsdirectory van de app retourneert. Op iOS wordt een vergelijkbare functie vervuld door NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).

SharedPreferences en DataStore

Voor het opslaan van sleutel-waardeparen biedt Android SharedPreferences en de modernere DataStore op basis van Kotlin-coroutines en het protobuf-protocol. SharedPreferences slaat gegevens op in een XML-bestand in de directory /data/data/<package>/shared_prefs/. Ondanks de eenvoud van gebruik heeft SharedPreferences nadelen: synchroon schrijven kan vertragingen veroorzaken op de UI-thread en het ontbreken van typeveiligheid verhoogt het risico op fouten. DataStore lost deze problemen op door een asynchrone API op basis van Flow en volledige typeondersteuning via protobuf-schema's.

SQLite-database en Room

Voor gestructureerde gegevens met relationele verbanden is SQLite of de wrapper Room de optimale keuze. De database wordt opgeslagen in een enkel bestand in de directory databases/ en ondersteunt volledige SQL-syntaxis. Room is een officiële Jetpack-bibliotheek die een typeveilige API, automatische schema-migratie en ondersteuning voor coroutines biedt. De grootte van de database kan enkele gigabytes bereiken zonder significant prestatieverlies bij correcte indexering. SQLite verwerkt op mobiele apparaten tot 50.000 schrijfbewerkingen per seconde op moderne flagship-processors.

EncryptedSharedPreferences

Voor het opslaan van vertrouwelijke gegevens, zoals authenticatietokens en encryptiesleutels, biedt Android EncryptedSharedPreferences. Deze wrapper over de standaard SharedPreferences versleutelt automatisch sleutels en waarden met AES256-GCM-None. Encryptie vindt plaats op bestandsniveau voordat naar schijf wordt geschreven, zodat zelfs bij fysieke toegang tot het apparaat een aanvaller de inhoud niet kan lezen. EncryptedSharedPreferences maakt deel uit van de AndroidX Security-bibliotheek, die ook EncryptedFile bevat voor het versleutelen van volledige bestanden.

Werken met interne opslag op Android

Android SDK biedt een set methoden voor het werken met interne opslag via de klasse Context. Elke methode retourneert het pad naar een specifieke systeemdirectory in de sandbox van de app. Laten we de basisbewerkingen van het schrijven en lezen van bestanden bekijken aan de hand van Kotlin.

Toegang tot filesDir via Context

De belangrijkste methode om het pad naar de interne bestandsdirectory te krijgen is context.filesDir. Het retourneert een File-object dat verwijst naar de directory /data/data/<package>/files/. Bij de eerste aanroep maakt het systeem automatisch alle benodigde bovenliggende directories aan. De grootte van bestanden in de interne opslag is niet expliciet beperkt, maar de totale hoeveelheid gegevens mag de beschikbare ruimte van de /data-partitie niet overschrijden, die gewoonlijk 60–80% van de totale flashgeheugencapaciteit van het apparaat bedraagt.

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

file.writeText("Notitie-inhoud")

val content = file.readText()
println("Gelezen: $content")

De methoden writeText en readText zijn extensiefuncties van de Kotlin-standaardbibliotheek. Ze beheren automatisch het openen en sluiten van stromen, waardoor geheugenlekken worden voorkomen. Voor het werken met binaire gegevens gebruikt u writeBytes en readBytes, die geen codering vereisen en met ByteArray-arrays werken. Bij het werken met grote bestanden wordt aanbevolen gebufferde stromen te gebruiken: BufferedReader en BufferedWriter voor tekst, BufferedInputStream en BufferedOutputStream voor binaire gegevens.

Creëren van subdirectories in de interne opslag

Om bestanden hiërarchisch te organiseren, maakt u subdirectories aan in filesDir. Dit helpt gegevens te structureren per type: afbeeldingen, documenten, exportbestanden. De methode mkdirs() maakt alle ontbrekende directories in het pad aan, inclusief geneste directories. Zorg ervoor dat de creatie is gelukt — de methode retourneert alleen true bij het aanmaken van nieuwe directories. Een fout bij het aanmaken wordt meestal veroorzaakt door gebrek aan ruimte op de /data-partitie of uitputting van inodes van het bestandssysteem.

kotlin
val imagesDir = File(context.filesDir, "images")
if (imagesDir.mkdirs()) {
    println("Directory aangemaakt")
}

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

Controleer de beschikbare ruimte voordat u grote bestanden schrijft met File.getFreeSpace() of File.getUsableSpace(). De tweede methode retourneert het aantal bytes dat beschikbaar is voor de huidige app, rekening houdend met beveiligingsquota — dit is nauwkeuriger in de context van multi-gebruikersapparaten. Als de beschikbare ruimte kleiner is dan de verwachte bestandsgrootte, toon dan een bericht aan de gebruiker en stel voor ruimte vrij te maken in de apparaatinstellingen.

Werken met interne opslag op iOS

Op iOS werkt elke app in een geïsoleerde Sandbox-container. Het systeem biedt geen API om buiten de grenzen ervan te komen zonder speciale machtigingen. Het belangrijkste hulpmiddel voor het werken met het bestandssysteem is de klasse FileManager uit het Foundation-framework. De Sandbox-container bevat verschillende standaard directories, elk met hun eigen back-upbeleid.

Toegang tot de Documents-directory via FileManager

De Documents-directory is bedoeld voor gebruikersgegevens die moeten worden bewaard tussen het starten van de app en moeten worden hersteld uit back-up. iOS neemt deze directory automatisch op in de back-up naar iCloud en iTunes. De methode urls(for:in:) retourneert een array van URL-adressen van de aangevraagde directory — het eerste element van de array is de primaire.

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 ondersteunt een volledige set bestandsbewerkingen: maken, kopiëren, verplaatsen, verwijderen en hernoemen. Elke bewerking kan een fout genereren, dus alle aanroepen moeten worden ingekapseld in een do-catch-constructie. Besteed speciale aandacht aan het verwijderen van bestanden — de bewerking is onomkeerbaar en het herstellen van gegevens na removeItem(at:) is onmogelijk zonder een voorafgaande back-up.

Beheer van uitzonderingen op back-up

Niet alle gegevens in de Sandbox-container hoeven in de iCloud-back-up terecht te komen. Bijvoorbeeld, de cache van gedownloade afbeeldingen of tijdelijke verwerkingsbestanden hoeven niet te worden hersteld — ze worden opnieuw aangemaakt bij volgend gebruik. Om een directory of bestand uit te sluiten van back-up, stelt u het attribuut isExcludedFromBackup in op true. Apple raadt aan altijd gegevens uit back-up uit te sluiten die op afstand kunnen worden hersteld, om de iCloud-opslagruimte te minimaliseren en de hersteltijd te verkorten.

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

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

Verschillen tussen interne opslag, cache en externe opslag

Elk type opslag op een mobiel apparaat heeft zijn doel en gebruiksregels. Inzicht in deze verschillen helpt de ontwikkelaar de juiste plek te kiezen voor elk type gegevens. Hieronder vindt u een vergelijking van de drie belangrijkste typen opslag die beschikbaar zijn voor de app.

KenmerkInternal StorageCache DirectoryExternal Storage
Zichtbaarheid voor andere appsVerborgenVerborgenToegankelijk
Verwijdering bij deïnstallatieVolledigVolledigAfhankelijk van locatie
Back-upOp Android — nee, op iOS — ja (Documents)NeeAlleen bij synchronisatie
Beschikbaarheid zonder dragerAltijdAltijdVereist SD-kaart
Risico op gegevensverliesMinimaalHoogGemiddeld
Aanbevolen bestandsgrootteTot 100 MBTot 50 MBElke grootte

Interne opslag is optimaal voor het opslaan van app-configuraties, databasebestanden en gebruikersdocumenten die niet toegankelijk mogen zijn voor andere programma's. De cache-directory is bedoeld voor tijdelijke bestanden die bij volgend gebruik opnieuw kunnen worden aangemaakt: gedownloade afbeeldingen, API-antwoorden, tussenliggende verwerkingsgegevens. Externe opslag is het meest geschikt voor grote mediabestanden (foto's, video's, muziek) en gegevens die de gebruiker met andere apps wil delen via gedeelde toegang.

De keuze van het opslagtype beïnvloedt ook de app-ranglijst in Google Play en App Store. Apps die grote hoeveelheden gegevens in de interne opslag bewaren zonder op te schonen, krijgen negatieve beoordelingen: gebruikers klagen over ruimtegebrek. Volgens een onderzoek van App Annie verwijdert 62% van de gebruikers een app als deze meer dan 500 MB interne opslag van het apparaat in beslag neemt zonder opschoningsoptie.

Aanbevelingen voor het gebruik van interne opslag

Correct beheer van de interne opslag van de app verbetert prestaties, beveiliging en gebruikerservaring. De volgende aanbevelingen zijn gebaseerd op de officiële documentatie van Android en iOS en op praktijkervaring met het ontwikkelen van apps met miljoenen installaties.

  • Minimaliseer de hoeveelheid opgeslagen gegevens. Gebruik interne opslag alleen voor kritieke bestanden, plaats de rest in cache of op externe opslag
  • Ruim regelmatig tijdelijke bestanden op. Controleer de cache-directory bij elke start en verwijder bestanden ouder dan 24 uur — dit vermindert de systeembelasting en voorkomt overloop van de /data-partitie
  • Versleutel vertrouwelijke gegevens met EncryptedSharedPreferences of EncryptedFile uit de AndroidX Security-bibliotheek. Het opslaan van tokens en wachtwoorden in platte tekst is een veelvoorkomende kwetsbaarheid die wordt misbruikt door trojans met root-toegang
  • Gebruik migratie bij het bijwerken van de bestandsstructuur. Controleer bij het uitbrengen van een nieuwe versie van de app op oude bestanden en verplaats ze naar nieuwe directories voordat u de oude verwijdert

Speciale aandacht moet worden besteed aan het testen van randgevallen. Controleer het gedrag van de app bij vol raken van de interne opslag, plotselinge onderbreking van het schrijven (app-crash, telefoongesprek) en bij herstel uit iOS-back-up. In elk van deze scenario's moeten gegevens consistent blijven of worden hersteld naar de laatste stabiele toestand. Gebruik transactionele bestanden: schrijf gegevens naar een tijdelijk bestand en hernoem het vervolgens atomair naar het doelbestand. Dit voorkomt het lezen van beschadigde gegevens bij een schrijffout.

Vergeet de gebruikerscontrole niet. Bied in de app-instellingen de optie om tijdelijke gegevens op te schonen en de gebruikte interne opslag weer te geven. Volgens de Google Play Console krijgen apps met een dergelijke functie 18% meer positieve beoordelingen in de categorie „Prestaties”.

Veelgestelde vragen

Wat gebeurt er met Internal Storage na het verwijderen van de app?

Alle gegevens uit de interne opslag van de app worden volledig verwijderd. Het besturingssysteem garandeert de afwezigheid van resterende bestanden, inclusief databases, instellingen en tijdelijke bestanden. Gegevens op externe opslag kunnen behouden blijven.

Kan een andere app mijn bestanden uit Internal Storage lezen?

Zonder root-toegang tot het apparaat kunnen andere apps geen bestanden uit Internal Storage van een andere app lezen. Op Android zijn hiervoor superuser-privileges nodig, en op iOS wordt isolatie op kernelniveau via Sandbox gegarandeerd.

Hoeveel gegevens kunnen maximaal worden opgeslagen in de interne opslag?

Er is geen expliciete limiet, maar de totale hoeveelheid is beperkt tot de beschikbare ruimte op de /data-partitie. Het wordt aanbevolen niet meer dan 100 MB per app te gebruiken — grotere hoeveelheden kunnen beter op externe opslag of in de cloud worden geplaatst.

Wat is het verschil tussen filesDir en cacheDir op Android?

filesDir is bedoeld voor permanente gegevens van de app en wordt niet door het systeem verwijderd zonder noodzaak. cacheDir is voor tijdelijke bestanden die het systeem kan verwijderen bij gebrek aan geheugen. Het systeem garandeert de integriteit van cacheDir niet.

Hoe verplaats ik gegevens van Internal Storage naar een SD-kaart?

Direct kopiëren van Internal Storage naar SD-kaart is verboden door het beveiligingsbeleid. Gebruik de MediaStore API op Android 10+ of SAF (Storage Access Framework) om kopieën van gegevens te maken in gedeelde toegang met toestemming van de gebruiker.

Samenvatting

  • Internal Storage is een geïsoleerde directory van elke app, beschermd tegen toegang door andere programma's en de gebruiker
  • Sandbox-architectuur op Android en iOS garandeert dat gegevens van verschillende apps niet overlappen en niet kunnen worden gelezen zonder root-toegang
  • Keuze van opslagmethode hangt af van het type gegevens: bestanden — via filesDir, instellingen — via DataStore, gestructureerde gegevens — via Room
  • iOS Sandbox omvat een back-upbeleid dat moet worden beheerd via het attribuut isExcludedFromBackup voor niet-kritieke gegevens
  • Verschil met cache zit in de bewaargarantie: Internal Storage wordt niet door het systeem verwijderd, in tegenstelling tot cacheDir dat kan worden opgeschoond bij gebrek aan geheugen
  • Aanbevolen hoeveelheid gegevens in interne opslag — tot 100 MB. Grotere bestanden moeten op externe opslag of in de cloudservice worden geplaatst
  • Gebruikerscontrole over de gebruikte ruimte en de mogelijkheid om gegevens op te schonen verhogen het vertrouwen en de ranglijst van de app in winkels

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook