2017-03-03 101 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