Android verwendet ein Dateisystem, das Festplatten-basierten 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 den Gebrauch durch Ihre Anwendung bestimmt sind, entweder in dedizierten Verzeichnissen innerhalb eines internen Speicher-Volumes oder in verschiedenen dedizierten Verzeichnissen innerhalb des externen Speichers. Verwenden Sie die Verzeichnisse innerhalb des internen Speichers, um vertrauliche Daten zu speichern, auf die andere Apps nicht zugreifen sollen.
- Gemeinsam genutzter Speicher:Speichern Sie Dateien, die Ihre Anwendung für andere Anwendungen freigeben soll, einschließlich Medien, Dokumenten und anderen Dateien.
- Einstellungen:Speichern Sie private, primitive Daten in Schlüssel/Wert-Paaren.
- Datenbanken:Speichern Sie strukturierte Daten mithilfe der Raum-Persistenzbibliothek in einer privaten Datenbank.
Die Eigenschaften dieser Optionen sind in der folgenden Tabelle zusammengefasst:
Art der Inhalte | Zugriffsmethode | Berechtigungen erforderlich | Können andere Apps darauf zugreifen? | Werden Dateien bei der Deinstallation der App entfernt? | |
---|---|---|---|---|---|
App-spezifische Dateien | Dateien, die nur für die Verwendung in deiner App bestimmt sind | Aus dem internen 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öherREAD_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 Inhalten, die geteilt werden können, einschließlich heruntergeladener Dateien | Storage Access Framework | Keine | Ja, über die Systemdateiauswahl | Nein |
App-Einstellungen | Schlüssel/Wert-Paare | Bibliothek der Jetpack-Einstellungen | Keine | Nein | Ja |
Datenbank | Strukturierte Daten | Chatroom-Persistenzbibliothek | Keine | Nein | Ja |
Die Lösung, für die Sie sich entscheiden, hängt von Ihren spezifischen Anforderungen ab:
- Wie viel Speicherplatz benötigen Ihre Daten?
- Im internen Speicher ist der Speicherplatz für appspezifische Daten begrenzt. Verwenden Sie andere Speicherarten, wenn Sie eine große Datenmenge sparen müssen.
- Wie zuverlässig muss der Datenzugriff sein?
- Wenn für die grundlegende Funktionalität Ihrer Anwendung bestimmte Daten erforderlich sind, z. B. beim Start der Anwendung, sollten Sie die Daten im internen Speicherverzeichnis oder in einer Datenbank ablegen. Auf App-spezifische Dateien, die im externen Speicher gespeichert sind, kann nicht immer zugegriffen werden, da Nutzer auf einigen Geräten ein physisches Gerät entfernen können, das dem externen Speicher entspricht.
- Welche Art von Daten müssen gespeichert werden?
- Wenn Sie Daten haben, die nur für Ihre Anwendung relevant sind, sollten Sie anwendungsspezifischen Speicher verwenden. Verwenden Sie für gemeinsam nutzbare Medieninhalte den freigegebenen Speicher, damit andere Apps auf die Inhalte zugreifen können. Verwenden Sie für strukturierte Daten entweder Einstellungen (für Daten mit Schlüssel/Wert-Paaren) oder eine Datenbank (für Daten mit mehr als zwei Spalten).
- Sollten die Daten für Ihre App privat sein?
- Verwenden Sie beim Speichern sensibler Daten – also Daten, die von keiner anderen Anwendung aus zugänglich sein sollen – internen Speicher, Einstellungen oder eine Datenbank. Der interne Speicher hat den zusätzlichen Vorteil, dass die Daten für Nutzer ausgeblendet sind.
Kategorien von Speicherstandorten
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. Der interne Speicher ist jedoch immer auf allen Geräten verfügbar, was ihn zu einem zuverlässigeren Ort zum Speichern von Daten macht, von dem Ihre App abhängig ist.
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 dein APK sehr groß ist, kannst du in der Manifestdatei deiner App festlegen, dass deine App stattdessen im externen Speicher installiert werden soll:
<manifest ... android:installLocation="preferExternal"> ... </manifest>
Berechtigungen und Zugriff auf externen Speicher
In Android sind die folgenden speicherbezogenen Berechtigungen definiert: READ_EXTERNAL_STORAGE
, WRITE_EXTERNAL_STORAGE
und MANAGE_EXTERNAL_STORAGE
.
In früheren Android-Versionen musste für Apps die Berechtigung READ_EXTERNAL_STORAGE
deklariert werden, um auf Dateien außerhalb der app-spezifischen Verzeichnisse im externen Speicher zugreifen zu können.
Außerdem mussten Anwendungen die Berechtigung WRITE_EXTERNAL_STORAGE
deklarieren, um in eine Datei außerhalb des anwendungsspezifischen Verzeichnisses zu schreiben.
Neuere Versionen von Android hängen eher vom Zweck einer Datei als von ihrem Speicherort ab, wenn es darum geht, ob eine App auf eine bestimmte Datei zugreifen und darin schreiben kann. 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 auf die Bereiche des Dateisystems des Geräts zugreifen können, 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 von MediaStore
ermöglicht. Weitere Informationen zu dieser Berechtigung und dazu, warum die meisten Apps sie nicht deklarieren müssen, um ihren Anwendungsfällen zu entsprechen, findest du in der Anleitung zur Verwaltung aller Dateien auf einem Speichergerät.
Begrenzter Speicher
Damit Nutzer mehr Kontrolle über ihre Dateien haben und die Dateiinhalte übersichtlicher bleibt, erhalten Apps für Android 10 (API-Level 29) und höher standardmäßig eingeschränkten Zugriff auf externen Speicher oder begrenzten Speicher. Diese Anwendungen haben nur Zugriff auf das anwendungsspezifische Verzeichnis im externen Speicher sowie auf die von der Anwendung erstellten Medientypen.
Verwenden Sie beschränkten 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 des begrenzten Speichers 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, wenn der beschränkte Speicher aktiviert ist.
Informationen zum Vorbereiten der Anwendung für den begrenzten Speicher finden Sie im Leitfaden Speicheranwendungsfälle und Best Practices. Wenn es für Ihre Anwendung einen anderen Anwendungsfall gibt, der nicht durch den begrenzten Speicher abgedeckt ist, reichen Sie eine Funktionsanfrage ein. Sie können die Verwendung des begrenzten Speichers vorübergehend deaktivieren.
Dateien auf einem Gerät ansehen
Um die auf einem Gerät gespeicherten Dateien aufzurufen, verwende den Device File Explorer von Android Studio.
Zusätzliche Ressourcen
Weitere Informationen zur Datenspeicherung finden Sie in den folgenden Ressourcen.