如何在Android上实现持久队列

时间:2012-01-27 12:50:21

标签: java android mobile queue

我的应用程序需要一个类似于队列的数据结构:将数据放入其中,从中接收数据,类似于FIFO。对于数据,我指的是现在的简单字符串,稍后可能是更复杂的对象。 问题是队列及其内容应该是持久的,无论Android正在做什么。如果应用程序关闭并重新打开(甚至Android重新启动),则队列应该具有与应用程序关闭之前相同的状态和数据。

我认为队列必须在引擎盖下使用某种存储,最好是设备的内部存储。也许你可以做一些头脑风暴如何实现这一点。队列不一定要在我的应用程序中运行,如果可以在Android中使用,它也可能是某种丢失耦合的后台服务(但对我的应用程序来说是私有的)。

4 个答案:

答案 0 :(得分:8)

May squareup是一个不错的选择。

  

QueueFile是一个快速,快速,基于文件的FIFO。从实例添加和删除是O(1)操作并且是原子的。写是同步的;在操作返回之前,数据将写入磁盘。底层文件的结构可以在进程甚至系统崩溃中生存,如果在变更过程中抛出I / O异常,则更改将中止。

答案 1 :(得分:7)

我建议使用Sqlite内的表格。我会创建自己的SqliteQueue来实现Queue接口。 Offer会在表格中添加条目。 Poll将返回一个条目并将其从表中删除。对于更复杂的对象,您可以使用GSON将对象转换为JSON字符串或将JSON字符串转换为对象。

答案 2 :(得分:3)

这是来自Path的好文库:

https://github.com/path/android-priority-jobqueue

"专门为Android编写的作业队列,可以轻松安排在后台运行的作业(任务),从而提高用户体验和应用程序的稳定性。"

并提供许多功能,如优先级,网络检查,回调等。

答案 3 :(得分:1)

我很擅长Java API中没有这样的数据结构,但实现你自己的Queue应该没有问题。请查看this文档,其中包含Android中数据存储机制的说明。我建议使用SharedPreferences,但您可以选择最适合您应用的内容。您可以扩展一个实现Queue接口的Java集合,并使用Android的存储方法添加持久性机制。希望这会有所帮助。