Daten- und Dateispeicher – Übersicht

Android verwendet ein Dateisystem, das laufwerkbasierten Dateisystemen auf anderen Plattformen ähnelt. Das System bietet mehrere Optionen zum Speichern Ihrer App-Daten:

  • App-spezifischer Speicher: Speichern Sie Dateien, die nur für die Verwendung durch Ihre Anwendung vorgesehen sind, entweder in dedizierten Verzeichnissen innerhalb eines internen Speicher-Volumes oder in verschiedenen dedizierten Verzeichnissen innerhalb eines externen Speichers. Verwenden Sie die Verzeichnisse innerhalb des internen Speichers, um vertrauliche Informationen zu speichern, auf die andere Anwendungen nicht zugreifen sollen.
  • Freigegebener Speicher:Speichert Dateien, die Ihre App für andere Apps freigeben möchte, z. B. Medien, Dokumente und andere Dateien.
  • Einstellungen:Speichern Sie private, primitive Daten in Schlüssel/Wert-Paaren.
  • Datenbanken:Speichern Sie strukturierte Daten mit der Room Persistence Library in einer privaten Datenbank.

Die Merkmale dieser Optionen sind in der folgenden Tabelle zusammengefasst:

Art der Inhalte Zugriffsmethode Berechtigungen erforderlich Haben andere Apps Zugriff? Dateien bei der Deinstallation der App entfernt?
App-spezifische Dateien Dateien, die nur für die Verwendung durch Ihre App bestimmt sind Aus internem Speicher, getFilesDir() oder getCacheDir()

Von externem Speicher, getExternalFilesDir() oder getExternalCacheDir()
Nie für internen Speicher benötigt

Nicht für externen Speicher erforderlich, wenn deine App auf Geräten mit Android 4.4 (API-Level 19) oder höher verwendet wird
Nein Ja
Medien Gemeinsam nutzbare Mediendateien (Bilder, Audiodateien, Videos) MediaStore API READ_EXTERNAL_STORAGE beim Zugriff auf Dateien anderer Apps unter Android 11 (API-Level 30) oder höher

READ_EXTERNAL_STORAGE oder WRITE_EXTERNAL_STORAGE beim Zugriff auf Dateien anderer Apps unter Android 10 (API-Level 29)

Unter Android 9 (API-Level 28) oder niedriger sind Berechtigungen für alle Dateien erforderlich
Ja, obwohl die andere App die Berechtigung READ_EXTERNAL_STORAGE benötigt Nein
Dokumente und andere Dateien Andere Arten von gemeinsam nutzbaren Inhalten, einschließlich heruntergeladener Dateien Storage Access Framework Keine Ja, über die Systemdateiauswahl Nein
App-Einstellungen Schlüssel/Wert-Paare Jetpack-Einstellungen Keine Nein Ja
Datenbank Strukturierte Daten Persistenzbibliothek Room Keine Nein Ja

Welche Lösung Sie wählen, hängt von Ihren spezifischen Anforderungen ab:

Wie viel Speicherplatz benötigen Ihre Daten?
Der interne Speicher bietet nur wenig Platz für appspezifische Daten. Verwenden Sie andere Speichertypen, wenn Sie eine große Datenmenge speichern müssen.
Wie zuverlässig muss der Datenzugriff sein?
Wenn für die grundlegende Funktionalität Ihrer App bestimmte Daten erforderlich sind, z. B. wenn die App gestartet wird, speichern Sie die Daten in einem internen Speicherverzeichnis oder in einer Datenbank. App-spezifische Dateien, die im externen Speicher gespeichert sind, sind nicht immer zugänglich, da Nutzer auf einigen Geräten ein physisches Gerät entfernen können, das einem externen Speicher entspricht.
Welche Art von Daten müssen Sie speichern?
Wenn Sie Daten haben, die nur für Ihre Anwendung von Bedeutung sind, verwenden Sie anwendungsspezifischen Speicher. Verwenden Sie für gemeinsam nutzbare Medieninhalte einen freigegebenen Speicher, damit andere Apps auf die Inhalte zugreifen können. Verwenden Sie für strukturierte Daten entweder Einstellungen (für Schlüssel/Wert-Paar-Daten) oder eine Datenbank (für Daten, die mehr als zwei Spalten enthalten).
Sollen die Daten in deiner App privat bleiben?
Verwenden Sie zum Speichern sensibler Daten – also Daten, die von keiner anderen Anwendung aus zugänglich sein sollten – den internen Speicher, Einstellungen oder eine Datenbank. Der interne Speicher hat den zusätzlichen Vorteil, dass die Daten für Nutzer nicht sichtbar sind.

Kategorien von Speicherorten

Android bietet zwei Arten von physischen Speicherstandorten: internen Speicher und externen Speicher. Auf den meisten Geräten ist der interne Speicher kleiner als der externe. Da der interne Speicher jedoch immer auf allen Geräten verfügbar ist, ist dieser Ort zum Speichern von Daten, von denen Ihre App abhängig ist, zuverlässiger.

Wechseldatenträger, z. B. eine SD-Karte, werden im Dateisystem als Teil des externen Speichers angezeigt. Android stellt diese Geräte über einen Pfad wie /sdcard dar.

Die Apps selbst werden standardmäßig im internen Speicher gespeichert. Wenn Ihr APK sehr groß ist, können Sie in der Manifestdatei Ihrer App festlegen, dass Ihre App stattdessen auf einem externen Speicher installiert wird:

<manifest ...
  android:installLocation="preferExternal">
  ...
</manifest>

Berechtigungen und Zugriff auf externen Speicher

Android definiert die folgenden speicherbezogenen Berechtigungen: READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE und MANAGE_EXTERNAL_STORAGE.

In früheren Android-Versionen mussten Apps die Berechtigung READ_EXTERNAL_STORAGE für den Zugriff auf Dateien außerhalb der app-spezifischen Verzeichnisse auf externem Speicher deklarieren. Außerdem müssen Apps die Berechtigung WRITE_EXTERNAL_STORAGE deklarieren, um in eine Datei außerhalb des app-spezifischen Verzeichnisses zu schreiben.

Bei neueren Android-Versionen wird eher der Zweck einer Datei als der Speicherort bestimmt, um zu bestimmen, ob eine App auf eine bestimmte Datei zugreifen und in sie schreiben kann. Insbesondere, wenn deine App auf Android 11 (API-Level 30) oder höher ausgerichtet ist, hat die Berechtigung WRITE_EXTERNAL_STORAGE keine Auswirkungen auf den Speicherzugriff deiner App. Dieses zweckbasierte Speichermodell verbessert den Datenschutz für Nutzer, da Apps nur Zugriff auf die Bereiche des Dateisystems des Geräts erhalten, die sie tatsächlich verwenden.

In Android 11 wird die Berechtigung MANAGE_EXTERNAL_STORAGE eingeführt, die Schreibzugriff auf Dateien außerhalb des app-spezifischen Verzeichnisses und von MediaStore bietet. Weitere Informationen zu dieser Berechtigung und dazu, warum die meisten Apps sie nicht deklarieren müssen, um ihre Anwendungsfälle zu erfüllen, finden Sie in der Anleitung zum Verwalten aller Dateien auf einem Speichergerät.

Begrenzter Speicher

Apps, die auf Android 10 (API-Level 29) und höher ausgerichtet sind, erhalten standardmäßig beschränkten Zugriff auf externen Speicher, also begrenzten Speicher, um Nutzern mehr Kontrolle über ihre Dateien zu geben und das Dateichaos zu reduzieren. Solche Anwendungen haben nur Zugriff auf das anwendungsspezifische Verzeichnis im externen Speicher sowie auf bestimmte Medientypen, die von der Anwendung erstellt wurden.

Verwenden Sie begrenzten Speicher, es sei denn, Ihre Anwendung benötigt Zugriff auf eine Datei, die außerhalb eines anwendungsspezifischen Verzeichnisses und außerhalb eines Verzeichnisses gespeichert ist, auf das die MediaStore-APIs zugreifen können. Wenn Sie anwendungsspezifische Dateien auf einem externen Speicher speichern, können Sie die Verwendung von begrenztem Speicher vereinfachen, indem Sie diese Dateien in einem anwendungsspezifischen Verzeichnis auf einem externen Speicher ablegen. So behält Ihre Anwendung den Zugriff auf diese Dateien bei, auch wenn der Speicher mit einem Speicherbereich aktiviert ist.

Informationen zum Vorbereiten Ihrer Anwendung für den beschränkten Speicher finden Sie im Leitfaden zu Anwendungsfällen und Best Practices für Speicher. Wenn es für Ihre Anwendung einen anderen Anwendungsfall gibt, der nicht durch den begrenzten Speicher abgedeckt ist, stellen Sie eine Funktionsanfrage. Sie können die Nutzung von begrenztem Speicher vorübergehend deaktivieren.

Dateien auf einem Gerät ansehen

Mit dem Gerätedatei-Explorer von Android Studio können Sie sich die auf einem Gerät gespeicherten Dateien ansehen.

Weitere Informationen

Weitere Informationen zur Datenspeicherung finden Sie in den folgenden Ressourcen.

Videos