2017-03-03 2 views
0

Ich möchte eine persistente Warteschlange in Android implementieren. Im Wesentlichen eine Warteschlange, in der Daten gespeichert werden, bis ein anderer Thread sie annimmt und irgendwo sendet. Die Reihenfolge, in der Daten gespeichert oder verbraucht werden, ist nicht wichtig (z. B. FIFO, LIFO, LILO usw.). Gibt es eine moderne Bibliothek in Android, die dies unterstützt?So implementieren Sie eine persistente Warteschlange in Android

fand ich eine vorherige Frage auf SOF aber stammt aus 2012: How to realize a persistent queue on Android

+0

Warum nicht Stack lifo = new Stack() oder Queue fifo = new PriorityQueue(); ? – sadat

+0

Das sieht gut aus, aber wie behalte ich die Prioritätsqueue, nachdem der Service/die Aktivität zerstört wurde? – MadProgrammer

Antwort

2

viele Wege gibt es, dies zu tun. Sie können die Sammlung persistieren, indem Sie sie in einer Datenbank wie SQLite speichern, als Datei serialisieren und sie bei Bedarf deserialisieren, oder Sie können sie in SharedPreferences von Android speichern.

Auf jeden Fall gibt es eine kühle Bibliothek namens Hawk (https://github.com/orhanobut/hawk) , die ein

ist

Sicher, einfach Schlüssel-Wert-Speicher für Android

Wie Hawk funktioniert: Hawk mechanism

Wenn Sie sich den Hawk-Quellcode ansehen, können Sie sehen, dass er SharedPreferences verwendet, um Daten auf der Festplatte zu speichern. Es serialisiert das Objekt, das Sie persistieren möchten, und speichert es in SharedPreferences als String.

Zitate und Bilder stammen von Hawk github Seite.

können Sie andere Alternativen finden Sie hier (in der „Persistence“ Abschnitt): https://github.com/codepath/android_guides/wiki/Must-Have-Libraries

+0

danke für deine gründliche antwort. Ich wusste nicht, dass Sie eine Sammlung in SharedPreferences speichern können. Ich dachte, das wäre nur für einfache Typen. Gibt es eine Grenze für die Größe von was Sie in SharedPreferences speichern können? – MadProgrammer

+0

Sie können Sammlungen nicht direkt in SharedPreferences speichern. Sie können nur primitive Typen speichern. Sie können die Liste jedoch serialisieren (z. B. indem Sie die Liste in json konvertieren) und als String speichern. Aber Sie müssen den Code schreiben, um dies zu tun. Daher ist es besser, stattdessen eine Bibliothek wie Hawk zu verwenden. In jedem Fall müssen Sie das Objekt serialisieren, um es zu speichern. Wenn die Sammlung sehr groß ist, ist es besser, sie nicht in SharedPreferences zu speichern. Das weil SharedPreferences als XML gespeichert werden und es langsam sein kann, ein großes XML zu laden. Ich denke, der effizienteste Weg ist die Verwendung von SQLite, aber es ist nicht der einfachste. – Flood2d

+0

Hawk verwendet SharedPreferences, um Daten auf der Festplatte zu speichern! Also, wenn Sie sich entscheiden, es in SharedPreferences zu speichern, würde ich auf jeden Fall Hawk verwenden;) – Flood2d

1

Sie können Besuche Priority Jobqueue

Es hat eine Option, um die Arbeitsplätze zu bestehen und sie zu priorisieren.

Verwandte Themen