Ein Überblick über Android Storage

Speicher ist das, was wir alle wissen, aber immer für selbstverständlich halten. Vor nicht allzu langer Zeit war jeder Sprung in der Speicherkapazität inkrementell und schien unmöglich zu sein. Heutzutage denken wir nicht weiter darüber nach, wie viel davon unsere Geräte haben (und kümmern uns nicht weniger um die Unterschiede).

Ein größerer Punkt wäre, die Entwicklung dessen zu betrachten, was im Speicher gespeichert ist. Vor Smartphones haben wir gelegentlich ein oder zwei Fotos, einige Spiele und eine Menge Textnachrichten gespeichert. Jetzt verfügt jedes Standardtelefon über eine Zusammenstellung von Anwendungen, Dokumenten, Fotos, Videos, Musikdateien und vielem mehr. Lassen Sie uns herausfinden, wie wir den Speicherplatz eines Geräts für unsere Anwendungen nutzen können.

Was wir in diesem Artikel behandeln werden, ist:

  1. Die verschiedenen Arten von Speicher auf Android-Handys
  2. Unterschiede zwischen den Speichertypen
  3. So verwenden Sie Speicher in Ihrer Anwendung

Jede Anwendung hat Zugriff auf zwei verschiedene Speichertypen: intern und extern . Es gibt große Unterschiede zwischen diesen beiden Speichertypen. Wenn Sie sie kennen, können Sie Ihre nächste Anwendung besser entwerfen.

Bevor wir beginnen, muss eines über Speicher und Cache gesagt werden. Speicher ist für Dinge gedacht, die Sie dauerhaft speichern möchten, während der Cache dazu dient, Dinge vorübergehend zu speichern.

Umzugstag

Interne Speicher

Wenn jede Anwendung auf dem Betriebssystem ausgeführt wird, verfügt sie über einen eigenen internen Speicher. Dieser Speicher ist privat und nur für die Verwendung der Anwendung bestimmt. Das heißt, andere Anwendungen können nicht darauf zugreifen, und der Benutzer kann nicht darauf zugreifen. Eine andere Sache, die Sie bei der Verwendung des internen Speichers beachten sollten, ist die Verfügbarkeit. Im Gegensatz zu externem Speicher steht für Ihre Anwendung immer interner Speicher zur Verfügung.

Die Verwendung dieses Speichers hat jedoch seine Nachteile. Wenn der Benutzer die Anwendung entfernt, werden auch alle im internen Speicher Ihrer App gespeicherten Daten entfernt. Stellen Sie sich vor, was passieren würde, wenn Sie ein Spiel auf Ihrem Telefon installieren und irgendwo später entscheiden würden, es zu entfernen. Sie möchten Ihren Spielfortschritt speichern lassen, wenn Sie das Spiel zufällig erneut installieren würden.

Wie speichern wir eine Datei im internen Speicher?

public void saveFileInternalStorage() { String FILENAME = "hello_world_file"; String inputToFile = "Hello From Internal Storage!"; try { FileOutputStream fileOutputStream = openFileOutput(FILENAME, Context.MODE_PRIVATE); fileOutputStream.write(inputToFile.getBytes()); fileOutputStream.close(); Toast.makeText(getApplicationContext(), "File " + FILENAME + " has been saved successfully", Toast.LENGTH_SHORT).show(); } catch (FileNotFoundException e) { e.printStackTrace(); Toast.makeText(getApplicationContext(), "File " + FILENAME + " has not been saved successfully due to an exception " + e.getLocalizedMessage(), Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); Toast.makeText(getApplicationContext(), "File " + FILENAME + " has not been saved successfully due to an exception " + e.getLocalizedMessage(), Toast.LENGTH_SHORT).show(); } }

Wie Sie im Codebeispiel sehen können, speichern wir eine Datei mit dem Namen hello_world_file , die den Text "Hallo aus dem internen Speicher!" Enthält. . Ich habe zwei catch-Klauseln erstellt, um die Ausnahmen zu demonstrieren, die auftreten können, wenn Sie dies versuchen. Sie können sie jedoch mit dem allgemeinen Exception-Objekt auf eine catch-Klausel minimieren.

Beachten Sie, dass die Methode openFileOutput die Datei öffnet, wenn sie bereits vorhanden ist. Wenn nicht, wird sie erstellt. Der zweite Parameter dieser Methode ist der Dateimodus. Dieser Parameter gibt den Umfang der Datei und den Zugriff darauf an. Der Standardwert ist MODE_PRIVATE, wodurch die Datei nur für Ihre Anwendung zugänglich ist.

Die beiden anderen Werte für diesen Parameter sind MODE_WORLD_READABLE und MODE_WORLD_WRITEABLE. Sie sind jedoch seit API 17 veraltet. Für die Freigabe privater Dateien mit anderen Anwendungen wird eine andere Logik verwendet, über die Sie hier mehr lesen können. Schließlich konvertieren wir beim Schreiben in die Datei unsere Zeichenfolge in Bytes und stellen sicher, dass die Datei am Ende geschlossen wird.

Defekte Festplatte - Speicher-BackUp

Externer Speicher

Im Gegensatz zu dem, was der Name andeutet, ist dies ein Speicher, der durch die Tatsache definiert wird, dass er nicht immer zugänglich ist. Dies kann bedeuten, dass es sich um eine externe SD-Karte (sekundärer externer Speicher) handeln kann, aber auch um einen Speicher auf dem Gerät (primärer externer Speicher).

Externer Speicher ist ein Speicher, auf den zugegriffen werden kann, wenn Sie Ihr Gerät über ein USB-Kabel an einen Computer anschließen. Wie Sie vielleicht vermutet haben, ist alles, was in diesem Speichertyp gespeichert ist, für andere Anwendungen auf Ihrem Gerät zugänglich, wird jedoch beibehalten, wenn Sie die Anwendung deinstallieren.

Bevor wir zeigen können, wie Dateien im externen Speicher gespeichert werden, müssen wir zwei Dinge tun:

  1. Stellen Sie sicher, dass dort genügend Speicherplatz zum Speichern der Datei vorhanden ist
  2. Bitten Sie zur Laufzeit um Erlaubnis

Um sicherzustellen, dass genügend Speicherplatz vorhanden ist, sind die folgenden Codezeilen erforderlich:

//Check if you can read/write to external storage public boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return true; } return false; }

Um Zugriff auf den externen Speicher zu erhalten, müssen wir unserer AndroidManifest.xml die folgende Berechtigung hinzufügen:

Darüber hinaus werden seit API 23 gefährliche Berechtigungen nicht während der Installationszeit, sondern zur Laufzeit autorisiert. Das Schreiben in einen externen Speicher wird als einer kategorisiert. Daher müssen wir eine Logik hinzufügen, damit der Benutzer entscheiden kann, ob er die Anwendungsberechtigung erteilt oder nicht.

public void saveFileExternalStorage(View view) { if (isExternalStorageWritable()) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { writeFileToExternalStorage(); } else{ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0); } } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case 0: { writeFileToExternalStorage(); break; } } }

Unser writeFileToExternalStorage sieht folgendermaßen aus:

public void writeFileToExternalStorage() { String root = Environment.getExternalStorageDirectory().toString(); File myDir = new File(root + "/saved_files"); if (!myDir.exists()) { myDir.mkdirs(); } try { File file = new File(myDir, "myfile.txt"); FileOutputStream out = new FileOutputStream(file); out.write(inputToFile.getBytes()); out.close(); Toast.makeText(getApplicationContext(), "File myfile.txt" + " has been saved successfully to external storage", Toast.LENGTH_SHORT).show(); } catch (Exception e) { e.printStackTrace(); } }

Wenn Sie ein Beispiel für den gesamten hier vorgestellten Code sehen möchten, können Sie zu diesem GitHub-Repository gehen.

Neun Acht Sieben

Gut zu wissen

Oben sind nur zwei einfache Beispiele für die Arbeit mit den verschiedenen Speichertypen für Ihre Anwendung aufgeführt. Da es sich um eine Ressource handelt, die vom System verwaltet wird, sollten wir uns auch der damit verbundenen Verhaltensweisen bewusst sein.

Standardmäßig wird Ihre Anwendung im internen Speicher installiert ( siehe Erklärung zu internalOnly ). Ab API-Ebene 8 können Sie Ihrem Manifest jedoch das Attribut installLocation hinzufügen , mit dem Ihre Anwendung im externen Speicher installiert werden kann. Ein Grund dafür ist, dass Ihre Anwendung sehr groß ist und Sie es vorziehen, wenn der Benutzer sie auf dem externen Speicher des Geräts installiert, da dort mehr Speicherplatz vorhanden ist.

Für dieses Attribut gibt es drei Werte:

  • auto - bedeutet, dass Sie keine bestimmte Einstellung haben, wo die Anwendung installiert werden soll. Die Anwendung versucht, im internen Speicher installiert zu werden. Wenn sie jedoch voll ist, wird sie im externen Speicher installiert
  • internalOnly - the application will only be installed to internal storage, and if there isn’t enough space there, it will not be installed
  • preferExternal - means that you want your application to be installed to external storage, but if there is not enough room there, it will be installed internally

For both the auto and the preferExternal options, the user has the option of moving the application from external storage to internal, and vice versa.

Keep in mind that once a user connects their device to a computer and enables it to share data or unmounts an SD card, all applications running from the external storage are destroyed. If your application uses one of the following features, you should not install it to external storage:

Verschiedene Dienste (Alarmdienst s ), insbesondere Input Method Engines, Live - Hintergründe, Anwendung Widgets, Account Manager, Sync - Adapter, Geräte - Administratoren und Broadcast - Empfänger für Boote hören abgeschlossen.