【问题标题】:How to implement a persistent queue in Android如何在 Android 中实现持久队列
【发布时间】:2017-07-22 22:30:10
【问题描述】:

我想在 Android 中实现一个持久队列。本质上是一个存储数据的队列,直到另一个线程将其接收并将其发送到某个地方。存储或使用数据的顺序并不重要(例如 FIFO、LIFO、LILO 等)。 Android 中是否有支持此功能的现代库?

我在 SOF 上发现了一个先前的问题,但这可以追溯到 2012 年:How to realize a persistent queue on Android

【问题讨论】:

  • 为什么不使用 Stack lifo = new Stack() 或 Queue fifo = new PriorityQueue(); ?
  • 那些看起来不错,但我如何坚持让我们说服务/活动被销毁后的 PriorityQueue?

标签: java android message-queue persistent-storage


【解决方案1】:

有很多方法可以做到这一点。您可以将集合保存到 SQLite 等数据库中,将其序列化为文件并在需要时对其进行反序列化,也可以将其保存在 Android 的 SharedPreferences 中。

反正有一个很酷的图书馆叫 Hawk (https://github.com/orhanobut/hawk) 那是一个

安全、简单的安卓键值存储

Hawk 的工作原理:

如果您查看 Hawk 源代码,您会发现它使用 SharedPreferences 将数据保存到磁盘。它序列化您想要持久化的对象并将其作为字符串保存到 SharedPreferences 中。

引用和图片取自 Hawk github 页面。

您可以在此处找到其他替代方案(在“持久性”部分):https://github.com/codepath/android_guides/wiki/Must-Have-Libraries

【讨论】:

  • 感谢您的详尽回答。我没有意识到您可以将集合保存到 SharedPreferences。我认为这仅适用于简单类型。 SharedPreferences 中可以存储的内容的大小是否有限制?
  • 您不能将集合直接保存到 SharedPreferences 中。您只能保存原始类型。但是您可以序列化列表(例如通过将列表转换为 json)并将其保存为字符串。但是您必须编写代码来执行此操作。所以最好改用 Hawk 之类的库。在任何情况下,您都需要序列化对象来存储它。无论如何,如果集合非常大,最好不要将其保存到 SharedPreferences 中。那是因为 SharedPreferences 保存为 xml,加载大 xml 可能会很慢。我认为最有效的方法是使用 SQLite,但这并不是最简单的。
  • Hawk 使用 SharedPreferences 将数据保存到磁盘!因此,如果您决定将其保存在 SharedPreferences 中,我肯定会使用 Hawk ;)
  • 感谢您的精彩解释。我在这里得到的最好的回应之一!
【解决方案2】:

您可以查看Priority Jobqueue

它可以选择保留作业并确定它们的优先级。

【讨论】:

    猜你喜欢
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多