Daten- und Dateispeicher – Übersicht

Android verwendet ein Dateisystem, das den festplattenbasierten 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 App vorgesehen sind, entweder in dedizierten Verzeichnissen auf einem internen Speichermedium oder in verschiedenen dedizierten Verzeichnissen auf einem externen Speicher. Verwenden Sie die Verzeichnisse im internen Speicher, um vertrauliche Informationen zu speichern, auf die andere Apps nicht zugreifen dürfen.
  • Gemeinsamer Speicher:Hier können Sie Dateien speichern, die Ihre App für andere Apps freigeben möchte, z. B. Medien, Dokumente und andere Dateien.
  • Einstellungen:Private, primitive Daten in Schlüssel/Wert-Paaren speichern.
  • Datenbanken:Strukturierte Daten in einer privaten Datenbank mit der Room-Persistenzbibliothek speichern.

Die Merkmale dieser Optionen sind in der folgenden Tabelle zusammengefasst:

Art der Inhalte Zugriffsmethode Berechtigungen erforderlich Können andere Apps darauf zugreifen? Werden Dateien beim Deinstallieren einer App entfernt?
App-spezifische Dateien Dateien, die nur für die Verwendung in Ihrer App vorgesehen sind Vom internen Speicher: getFilesDir() oder getCacheDir()

Vom externen Speicher: getExternalFilesDir() oder getExternalCacheDir()
Nie für internen Speicher erforderlich

Nicht für externen Speicher erforderlich, wenn Ihre App auf Geräten mit Android 4.4 (API‑Level 19) oder höher verwendet wird
Nein Ja
Medien Freigabefähige 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)

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

Die Lösung, die Sie auswählen, hängt von Ihren spezifischen Anforderungen ab:

Wie viel Speicherplatz benötigen Ihre Daten?
Der interne Speicher hat nur begrenzten Speicherplatz für app-spezifische Daten. Verwenden Sie andere Speichertypen, wenn Sie eine große Menge an Daten speichern müssen.
Wie zuverlässig muss der Datenzugriff sein?
Wenn für die grundlegenden Funktionen Ihrer App bestimmte Daten erforderlich sind, z. B. beim Starten der App, speichern Sie die Daten im internen Speicherverzeichnis oder in einer Datenbank. App-spezifische Dateien, die im externen Speicher abgelegt sind, sind nicht immer zugänglich, da Nutzer auf einigen Geräten das physische Gerät, das dem externen Speicher entspricht, entfernen können.
Welche Art von Daten müssen Sie speichern?
Wenn Sie Daten haben, die nur für Ihre App von Bedeutung sind, verwenden Sie app-spezifischen Speicher. Verwenden Sie für freigabefähige Medieninhalte freigegebenen Speicher, damit andere Apps auf die Inhalte zugreifen können. Verwenden Sie für strukturierte Daten entweder Einstellungen (für Schlüssel/Wert-Daten) oder eine Datenbank (für Daten mit mehr als zwei Spalten).
Sollen die Daten für Ihre App privat sein?
Wenn Sie vertrauliche Daten speichern – Daten, auf die keine andere App zugreifen sollte –, verwenden Sie den internen Speicher, Einstellungen oder eine Datenbank. Der interne Speicher hat den zusätzlichen Vorteil, dass die Daten für Nutzer verborgen sind.

Kategorien von Speicherorten

Android bietet zwei Arten von physischen Speicherorten: internen Speicher und externen Speicher. Auf den meisten Geräten ist der interne Speicher kleiner als der externe Speicher. Der interne Speicher ist jedoch immer auf allen Geräten verfügbar und daher ein zuverlässigerer Ort für Daten, von denen Ihre App abhängt.

Wechseldatenträger wie SD-Karten werden im Dateisystem als Teil des externen Speichers angezeigt. In Android werden diese Geräte über einen Pfad wie /sdcard dargestellt.

Apps werden standardmäßig im internen Speicher gespeichert. Wenn Ihr APK jedoch sehr groß ist, können Sie in der Manifestdatei Ihrer App angeben, dass die App stattdessen auf einem externen Speicher installiert werden soll:

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

Berechtigungen und Zugriff auf externen Speicher

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

In früheren Android-Versionen mussten Apps die Berechtigung READ_EXTERNAL_STORAGE deklarieren, um auf Dateien außerhalb der app-spezifischen Verzeichnisse auf dem externen Speicher zuzugreifen. Außerdem müssen Apps die Berechtigung WRITE_EXTERNAL_STORAGE deklarieren, um in eine Datei außerhalb des app-spezifischen Verzeichnisses schreiben zu können.

Bei neueren Android-Versionen hängt die Fähigkeit einer App, auf eine bestimmte Datei zuzugreifen und in sie zu schreiben, mehr vom Zweck der Datei als von ihrem Speicherort ab. Wenn Ihre App auf Android 11 (API‑Level 30) oder höher ausgerichtet ist, hat die Berechtigung WRITE_EXTERNAL_STORAGE keinen Einfluss auf den Zugriff Ihrer App auf den Speicher. Dieses zweckbasierte Speichermodell verbessert den Datenschutz, 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 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 im Leitfaden zum Verwalten aller Dateien auf einem Speichergerät.

Begrenzter Speicher

Damit Nutzer mehr Kontrolle über ihre Dateien haben und weniger Dateien auf ihren Geräten gespeichert werden, erhalten Apps, die für Android 10 (API-Level 29) und höher entwickelt wurden, standardmäßig eingeschränkten Zugriff auf den externen Speicher, auch Scoped Storage genannt. Solche Apps haben nur Zugriff auf das app-spezifische Verzeichnis auf dem externen Speicher sowie auf bestimmte Medientypen, die von der App erstellt wurden.

Verwenden Sie den begrenzten Speicher, es sei denn, Ihre App benötigt Zugriff auf eine Datei, die außerhalb eines app-spezifischen Verzeichnisses und außerhalb eines Verzeichnisses gespeichert ist, auf das die MediaStore-APIs zugreifen können. Wenn Sie app-spezifische Dateien auf externem Speicher speichern, können Sie die Einführung von Scoped Storage erleichtern, indem Sie diese Dateien in einem app-spezifischen Verzeichnis auf externem Speicher ablegen. So behält Ihre App den Zugriff auf diese Dateien bei, wenn der eingeschränkte Speicher aktiviert ist.

Informationen zur Vorbereitung Ihrer App auf die Verwendung von Scoped Storage finden Sie im Leitfaden zu Anwendungsfällen und Best Practices für den Speicher. Wenn Ihre App einen anderen Anwendungsfall hat, der nicht durch den eingeschränkten Speicher abgedeckt wird, reichen Sie eine Funktionsanfrage ein. Sie können die Verwendung von scoped storage vorübergehend deaktivieren.

Dateien auf einem Gerät ansehen

Wenn Sie die auf einem Gerät gespeicherten Dateien ansehen möchten, verwenden Sie den Device File Explorer in Android Studio.

Zusätzliche Ressourcen

Weitere Informationen zur Datenspeicherung finden Sie in den folgenden Ressourcen.

Videos