2017-03-03 99 views
0

我想在Android中實現持久隊列。本質上是一個隊列,在這個隊列中存儲數據,直到另一個線程獲取並將其發送到某個地方數據存儲或消耗的順序並不重要(例如FIFO,LIFO,LILO等)。 Android中是否有現代化的圖書館支持這一功能?如何在Android中實現持久隊列

我發現SOF前一個問題,但這個日期從2012年:How to realize a persistent queue on Android

+0

爲什麼不使用Stack lifo = new Stack()或Queue fifo = new PriorityQueue(); ? – sadat

+0

那些看起來不錯,但是我怎麼堅持讓服務/活動被銷燬後說PriorityQueue? – MadProgrammer

回答

2

有做這個有很多的方式。您可以通過將集合保存到SQLite等數據庫中來持久化該集合,將其作爲文件序列化並在需要時將其反序列化,也可以將其保存在Android的SharedPreferences中。

反正有一個叫鷹 (https://github.com/orhanobut/hawk) 酷庫是一個

安全,簡單的鍵 - 值存儲爲Android

鷹是如何工作的: Hawk mechanism

如果您查看Hawk源代碼,您可以看到它使用SharedPreferences將數據保存到磁盤。它將您要保存的對象序列化並將其作爲字符串保存到SharedPreferences中。

引用和圖片摘自Hawk github頁面。

你可以在這裏找到其他替代品(以下簡稱「持久性」一節):https://github.com/codepath/android_guides/wiki/Must-Have-Libraries

+0

感謝您的徹底解答。我沒有意識到你可以將一個集合保存到SharedPreferences中。我認爲這隻適用於簡單的類型。 SharedPreferences中可以存儲的大小是否有限制? – MadProgrammer

+0

您無法將集合直接保存到SharedPreferences中。您只能保存原始類型。但是你可以序列化列表(例如通過將列表轉換成json)並將其保存爲字符串。但是你必須編寫代碼來做到這一點。所以最好使用像Hawk這樣的庫。無論如何,你需要序列化對象來存儲它。無論如何,如果集合非常大,最好不要將它保存到SharedPreferences中。這是因爲SharedPreferences被保存爲xml,並且可能會很慢地加載一個大的xml。我認爲最有效的方式是使用SQLite,但它不是最簡單的。 – Flood2d

+0

Hawk使用SharedPreferences將數據保存到磁盤!因此,如果您決定將其保存在SharedPreferences中,我肯定會使用Hawk;) – Flood2d