Android verwendet ein Dateisystem, das Festplatten-Dateisystemen auf anderen Plattformen ähnelt. Das System bietet mehrere Optionen zum Speichern von 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 im externen Speicher. Verwenden Sie die Verzeichnisse im internen Speicher, um vertrauliche Informationen zu speichern, auf die andere Apps nicht zugreifen dürfen.
- Gemeinsam genutzter Speicher: Speichern Sie Dateien, die Ihre App für andere Apps freigeben möchte, einschließlich Medien, Dokumente und andere Dateien.
- Einstellungen: Speichern Sie private, primitive Daten in Schlüssel/Wert-Paaren.
- Datenbanken: Speichern Sie strukturierte Daten in einer privaten Datenbank mit der Room Persistenzbibliothek.
Die Merkmale dieser Optionen sind in der folgenden Tabelle zusammengefasst:
| Art der Inhalte | Zugriffsmethode | Berechtigungen erforderlich | Können andere Apps zugreifen? | Werden Dateien bei der Deinstallation der App entfernt? | |
|---|---|---|---|---|---|
| App-spezifische Dateien | Dateien, die nur für die Verwendung durch Ihre App vorgesehen sind | Aus dem internen Speicher: getFilesDir() oder
getCacheDir()Aus dem externen Speicher: getExternalFilesDir() oder
getExternalCacheDir() |
Für den internen Speicher nie erforderlich Für den externen Speicher nicht 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, wenn auf Dateien anderer Apps unter
Android 11 (API-Level 30) oder höher zugegriffen wirdREAD_EXTERNAL_STORAGE oder WRITE_EXTERNAL_STORAGE
wenn auf Dateien anderer Apps unter Android 10 (API-Level 29) zugegriffen wirdBerechtigungen sind für alle Dateien unter Android 9 (API-Level 28) oder niedriger erforderlich |
Ja, die andere App benötigt jedoch die READ_EXTERNAL_STORAGE
Berechtigung. |
Nein |
| Dokumente und andere Dateien | Andere Arten von freigabefähigen Inhalten, einschließlich heruntergeladener Dateien | Storage Access Framework | Keine | Ja, über die Dateiauswahl des Systems | Nein |
| App Einstellungen | Schlüssel/Wert-Paare | Jetpack Bibliothek „Preferences“ | Keine | Nein | Ja |
| Datenbank | Strukturierte Daten | Room-Persistenzbibliothek | Keine | Nein | Ja |
Die von Ihnen gewählte Lösung hängt von Ihren spezifischen Anforderungen ab:
- Wie viel Speicherplatz benötigen Ihre Daten?
- Der interne Speicher bietet nur begrenzten Platz für app-spezifische Daten. Verwenden Sie andere Arten von Speicher, wenn Sie eine große Menge an Daten speichern müssen.
- Wie zuverlässig muss der Datenzugriff sein?
- Wenn bestimmte Daten für die grundlegende Funktion Ihrer App erforderlich sind, z. B. beim Starten der App, platzieren Sie die Daten im Verzeichnis des internen Speichers oder in einer Datenbank. App-spezifische Dateien, die im externen Speicher gespeichert sind, sind nicht immer zugänglich da einige Geräte es Nutzern ermöglichen, ein physisches Gerät zu entfernen, das dem externen Speicher entspricht.
- Welche Art von Daten müssen Sie speichern?
- Wenn Sie Daten haben, die nur für Ihre App von Bedeutung sind, verwenden Sie den app-spezifischen Speicher. Verwenden Sie für freigabefähige Medieninhalte den gemeinsam genutzten 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, auf die keine andere App zugreifen darf, verwenden Sie den internen Speicher, Einstellungen oder eine Datenbank. Ein weiterer Vorteil des internen Speichers ist, dass die Daten für Nutzer verborgen sind.
Kategorien von Speicherorten
Android bietet zwei Arten von physischen Speicherorten: interner Speicher und externer 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 macht es zu einem zuverlässigeren Ort für Daten, von denen Ihre App abhängt.
Wechseldatenträger wie eine SD-Karte werden im Dateisystem als Teil des
externen Speichers angezeigt. Android stellt diese Geräte über einen Pfad dar, z. B.
/sdcard.
Apps werden standardmäßig im internen Speicher gespeichert. Wenn Ihre APK-Größe jedoch sehr groß ist, können Sie in der Manifestdatei Ihrer App eine Einstellung angeben, um Ihre App stattdessen im externen Speicher zu installieren:
<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
READ_EXTERNAL_STORAGE Berechtigung deklarieren, um auf Dateien außerhalb der app-spezifischen
Verzeichnisse im externen Speicher zuzugreifen.
Außerdem mussten Apps die Berechtigung WRITE_EXTERNAL_STORAGE deklarieren, um in
Dateien außerhalb des app-spezifischen Verzeichnisses zu schreiben.
Neuere Android-Versionen stützen sich bei der Bestimmung der Fähigkeit einer App, auf eine bestimmte Datei zuzugreifen und in sie zu schreiben, stärker auf den Zweck der Datei als auf ihren Speicherort. Insbesondere, wenn Ihre App auf Android 11 (API-Level 30) oder höher ausgerichtet ist, hat die
WRITE_EXTERNAL_STORAGE Berechtigung keine Auswirkungen auf den Zugriff Ihrer App auf den Speicher. Dieses zweckbasierte Speichermodell verbessert den Datenschutz der Nutzer
da Apps nur Zugriff auf die Bereiche des Dateisystems des Geräts erhalten, die
sie tatsächlich verwenden.
Android 11 führt die Berechtigung MANAGE_EXTERNAL_STORAGE ein, 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 Speichermedium.
Begrenzter Speicher
Um Nutzern mehr Kontrolle über ihre Dateien zu geben und die Dateiverwaltung zu vereinfachen, erhalten Apps, die auf Android 10 (API-Level 29) und höher ausgerichtet sind, standardmäßig begrenzten Zugriff auf den externen Speicher, den sogenannten begrenzten Speicher. Solche Apps haben nur Zugriff auf das app-spezifische Verzeichnis im externen Speicher sowie auf bestimmte Arten von Medien 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 im externen Speicher speichern, können Sie
die Einführung des begrenzten Speichers erleichtern, indem Sie diese Dateien in einem
app-spezifischen Verzeichnis im externen
Speicher platzieren. So behält Ihre App
den Zugriff auf diese Dateien, wenn der begrenzte Speicher aktiviert ist.
Informationen zur Vorbereitung Ihrer App auf den begrenzten Speicher finden Sie im Leitfaden Anwendungsfälle und Best Practices für den Android-Speicher. Wenn Ihre App einen anderen Anwendungsfall hat, der nicht vom begrenzten Speicher abgedeckt wird, reichen Sie eine Funktionsanfrage ein. Sie können die Verwendung des begrenzten Speichersvorü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 von Android Studio.
Zusätzliche Ressourcen
Weitere Informationen zur Datenspeicherung finden Sie in den folgenden Ressourcen.