我的应用程序需要一个类似于队列的数据结构:将数据放入其中,从中接收数据,类似于FIFO。对于数据,我指的是现在的简单字符串,稍后可能是更复杂的对象。 问题是队列及其内容应该是持久的,无论Android正在做什么。如果应用程序关闭并重新打开(甚至Android重新启动),则队列应该具有与应用程序关闭之前相同的状态和数据。
我认为队列必须在引擎盖下使用某种存储,最好是设备的内部存储。也许你可以做一些头脑风暴如何实现这一点。队列不一定要在我的应用程序中运行,如果可以在Android中使用,它也可能是某种丢失耦合的后台服务(但对我的应用程序来说是私有的)。
答案 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的存储方法添加持久性机制。希望这会有所帮助。