如何在Android上实现持久队列

问题描述 投票:0回答:5

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

我认为队列必须在后台使用某种存储,最好是设备的内部存储。也许你可以集思广益如何实现这一点。队列不一定必须在我的应用程序中运行,如果在 Android 中可能的话,它也可能是某种松散耦合的后台服务(但对我的应用程序来说是私有的)。

java android mobile queue
5个回答
9
投票

May squareup是一个不错的选择。

QueueFile 是一种快如闪电、事务性、基于文件的 FIFO。添加和删除实例是一个 O(1) 操作,并且是原子操作。写入是同步的;在操作返回之前,数据将被写入磁盘。底层文件的结构可以承受进程甚至系统崩溃,如果在变异更改期间引发 I/O 异常,则更改将中止。


8
投票

我建议在

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


3
投票

这是来自 Path 的好库:

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

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

并提供优先级、网络检查、回调等多种功能


1
投票

我很高兴Java API中没有这样的数据结构,但是实现你自己的类型应该没有问题

Queue
。看一下this文档,其中包含Android中数据存储机制的描述。我建议使用
SharedPreferences
,但您可以选择最适合您的应用程序。您可以扩展实现
Queue
接口的 Java 集合之一,并使用 Android 的存储方法添加持久性机制。希望这有帮助。


0
投票

这可能会有所帮助。该库通过提供更高级的功能和改进的稳健性来扩展

com.square.tape2
提供的 QueueFile:

雷达共享-andoid/utils

© www.soinside.com 2019 - 2024. All rights reserved.