2016-03-25 5 views
0

ich ein HashMap<String, Integer> habe, die ich brauche über Lebensläufe/neu gestartet wird, über die Aktivität Lebenszyklus zu sparen, wenn app neu gestartet usw.
Es gibt folgende Möglichkeiten:
1) Einsatz Gemeinsame Voreinstellungen und Schleife über alle Schlüssel und speichern Sie die <key,value> Paare genau so in freigegebenen Einstellungen
2) Konvertieren Sie die Hash-Map zu JSON und speichern Sie als String in gemeinsamen Einstellungen.
3) Da hashmap serialisierbar ist, speichern Sie es als solches im internen Speicher.Optimaler Weg durch Aktivität/Fragment Lifecycles zu speichern hashmap

Aber was ist der beste Ansatz leistungs weise? Was ist der Standard/die beste Vorgehensweise?
Für mich scheint es Option (3), aber aus verschiedenen Posts sagen viele Leute das Gegenteil. Ist der Overhead von serializable so viel für meine spezifische Definition von hashmap? I.e. keine komplexen Objektschlüssel-Werte?

+0

Betrachten wir mit 'ArrayMap' statt' HashMap', seine Unterstützung Libs – Sourabh

Antwort

0

2) ist Standard und Best Practice.

Ich würde 1) schlechte Übung betrachten, da SharedPreferences missbraucht werden.

In Bezug auf die Leistung: Sie müssten diese auf Ihren Anwendungsfall zugeschnitten Benchmark. Ich würde erwarten, 2) am schnellsten zu sein, aber je nach Kartengröße und JSON-Konvertierung Umsetzung, 3) könnte schneller sein.

Nebenbei bemerkt: Wenn die Karte weniger als 1000 Einträge hat, würde ich nicht über die Leistung sorgen

Vorzeitige Optimierung ist die Wurzel allen Übels ist

— Donald Knuth

+0

Ja es nicht mehr als 1000 Einträge haben sollte. Warum missbraucht 1 die gemeinsamen Einstellungen? JSON-Zeichenfolge würde auch dort gespeichert werden – Jim

+0

SharedPreferences sind eine "Schnittstelle für den Zugriff auf und Ändern von Präferenzdaten" und sollte verwendet werden, um Einstellungen oder Verhaltensflags zu speichern. – F43nd1r

+0

Natürlich können Sie es sonst verwenden, und wenn Ihre Karte nicht groß ist, wird dies kein Problem sein. Im Allgemeinen kann das Speichern komplexer Daten in SharedPreferences zu Leistungseinbußen führen, da SharedPreferences im Speicher verbleiben. – F43nd1r

1

Option (3). Warum?

1) Gemeinsame Einstellungen verwenden XML-Datei zum Speichern von Daten. Sie müssen die Datei lesen und das XML analysieren. (lesen + parsen)

2) Sie müssen lesen und XML analysieren, dann JSON parsen. (lesen + analysieren + parsen)

3) Sie lesen gerade die Datei und initialisieren hashmap. (lesen)


Warum Menschen nicht option3 benutzen?

weil sie mit anderen Technologien kommunizieren wollen, so wird Portabilität die hohe Anforderung sein.

+0

Ich sehe deinen Standpunkt. Aber ich hatte den Eindruck, dass Serialisierung auch langsam ist – Jim

0

Haben Sie eine Anwendungsklasse oder ein Singleton als Container für Ihre Daten betrachtet, um Konfigurationsänderungen zu überstehen?

Sie können auch ein beibehaltenes Fragment für diesen Zweck verwenden.

Diese Varianten sind die schnellsten, während die App läuft.

Um den Status zwischen den Neustarts zu speichern, müssen Sie die Serialisierung auf die eine oder andere Weise verwenden.

Google Team behauptet Parcelable Schnittstelle ist schneller als klassische Serializable (SO link).

Auch stattdessen JSON betrachten GSON (SO link).

Natürlich ein Profiler ist Ihre endgültige Entscheidung Schiedsrichter ...

Verwandte Themen