Wenn Sie Bilder und Daten zwischenspeichern, sollten Sie internen oder externen Speicher verwenden?

9

Ich habe diese Android App Einstellungen / Daten speichern im internen / externen Speicher , aber ich glaube nicht, dass ich wirklich eine Antwort habe.

Ich entwickle eine App, in der ich einige "Cache" -Daten speichern soll, wie ein Dutzend Bilder und einige Strings (json).

Anfangs habe ich alles auf der SD-Karte gespeichert (externer Speicher) , aber später dachte ich, dass dies durch die SDCard-Verschrottung in den meisten neueren Geräten veraltet sein könnte.

Nachdem ich ein wenig gelesen habe, habe ich verstanden, dass externer Speicher nicht nur SD-Karte ist, sondern "ein entfernbares Speichermedium (wie eine SD-Karte) oder ein interner (nicht entfernbarer) Speicher", also sollte es nicht veraltet sein, aber .. .it's shared space, und es gibt keine Eigentumsrechte für die dort gespeicherten Dateien. Das erste Problem war, dass ich sie beim Löschen der App nicht löschen konnte.

Ich habe also in den internen Speicher gewechselt, um zu vermeiden, dass die Dateien / Bilder "öffentlich" sind und sie auch nach dem Löschen der App entfernt werden.

Ist dies der empfohlene Ansatz?

Auf Geräten mit wenig internem Speicher und viel Platz in der SD-Karte ist das ein guter Ansatz?

Meine Anwendung unterstützt von 1.6 bis 4.0 (bisher), also habe ich viele Legacy-Geräte ... und ich muss die App funktionieren (gut) auf allen.

Ich freue mich auf einige interessante Antworten!

    
neteinstein 16.12.2011, 15:48
quelle

3 Antworten

4

Es hängt von der Art der Daten ab, die Sie speichern möchten.

Sie erwähnen, dass es sich um zwischengespeicherte Daten handelt, daher ist es unangemessen, ob es aus irgendeinem Grund verschwindet. Dies führt zu der Annahme, dass Sie getCacheDir() verwenden sollten. In diesem Fall wird das System Dateien entfernen, wenn der Cache zu groß wird, so dass Geräte mit wenig internem Speicher kein Problem darstellen sollten (obwohl es empfohlen wird, dies selbst zu verwalten), es ist relativ sicher und wird von der App verwaltet Wenn eine Deinstallation durchgeführt wird, wird sie entfernt.

getExternalCacheDir() wurde in 2.2 eingeführt und ist für Sie nicht von Nutzen, es sei denn, Sie möchten die Version erkennen und zwischen den 2 Caching-Verzeichnissen wechseln. getExternalCacheDir() bietet keine Sicherheit, so dass auf Daten trotzdem mit Zugriff zugegriffen werden kann auf die SD-Karte. Der einzige Grund, warum ich denken könnte, dass Sie dies tun möchten, ist die Größe des Cache, die Sie wünschen, aber aus Ihrer Beschreibung scheinen die Daten nicht übertrieben.

AKTUALISIERT vom Kommentar:

  

obwohl dies ein spezifischer Fall ist, in dem es Cache ist ... aber ich will nicht   Es wird gelöscht, wenn das System dies wünscht. Es ist die Art von Cache   dass ich die App brauche, um zu entscheiden, wann ich sie löschen soll. Was ist das Hauptanliegen?   Speichern im "normalen" internen Speicher, ohne sich im Cache zu befinden   dir?

Wenn Sie zu dem Zeitpunkt kommen, an dem das System interne zwischengespeicherte Daten aufräumt, weil der Speicher so niedrig ist, sollten Sie es wahrscheinlich belassen, um diese Art von App-Daten zu bereinigen. Durch die Verwendung des internen Standard-Datenspeichers umgehen Sie diesen sicheren Schutz, der wahrscheinlich unangenehmere Probleme verursachen würde als das Löschen von App-Daten.

Wenn Ihre Daten von großer Bedeutung sind, würde ich vorschlagen, spezifische Daten zu ermitteln, die wichtiger sind, und diese getrennt zu verwalten. Wenn diese Daten, die Sie identifizieren, sicher sein müssen, dann scheint der interne Speicher, der Dateien oder eine db (abhängig vom Datentyp) verwendet, Ihre einzige echte Option zu sein, aber Sie müssen sich vor dem Aufbau dieser Daten hüten.

AKTUALISIERT von Kommentar

  

Was halten Sie von SharedPreferences zum Speichern von String-Daten?   Gibt es eine Beschränkung für die Größe der SharedPreference-Zeichenfolge? Ist es ein (gut)   Möglichkeit?

Ich habe gemeinsame Voreinstellungen verwendet, um relativ große JSON-Strings in der Vergangenheit ohne Probleme zu speichern. Ich finde, dass es einfacher ist, die Datenbanken für primitive Datentypen (und Strings) zu verwenden, wo begrenzte Werte gespeichert werden müssen. Wenn Sie jedoch Bilder oder viele Werte haben, wird die Verwaltung komplexer. Außerdem haben Sie das gleiche Problem wie beim internen Standardspeicher hinsichtlich des Speicherplatzes.

    
zode64 16.12.2011, 16:10
quelle
0

Ich würde internen Speicher für den Cache verwenden. Dadurch wird verhindert, dass ein Nutzer auf die in Ihrer App verwendeten Dateien zugreifen kann. Ich würde für interne

gehen     
coder_For_Life22 16.12.2011 16:09
quelle
0

Ich würde Bilder auf dem externen Speicher behalten, wahrscheinlich in einem "versteckten" Ordner (Hinzufügen eines Punktes am Anfang des Ordnernamens: .folder ) und auch einen Medienscanner "avoider" ( .nomedia ), weil Sie, wie Sie sagten, möchten, dass die Anwendung in alten Geräten funktioniert und genau diese Geräte nicht über zu viel internen Speicher verfügen.

Sie können auch eine Option in Ihrer Anwendung hinzufügen, um diesen Ordner zu entfernen. Wenn der Benutzer die Deinstallation durchführen möchte, kann er dies vorher tun.

    
SERPRO 16.12.2011 16:10
quelle