【问题标题】:Recommendations for persisting data on Android?在 Android 上持久化数据的建议?
【发布时间】:2011-01-02 16:18:14
【问题描述】:

有一个 Web 服务提供我的应用程序使用的一些数据。这些数据相当大,而且很少更改,所以我认为如果应用程序可以将其缓存在 SD 卡上并仅在需要时更新它会很好。

目前我正在获取数据(一个 XML 文件)并使用 SAX 将其解析为对象树。这个过程在我的 WIFI 上最多需要 2-3 秒。但是,将生成的对象序列化到 SDCard 需要更长的时间(一分钟或更长时间),并且反序列化它仍然需要比最初下载/解析更长的时间。

有没有人有任何建议来改进这个或替代的想法来持久化这些数据(除了保存 XML 文件并每次都重新解析)?

更新:这不仅仅是一个琐碎的记录集合。对象图实际上非常复杂,将其存储到数据库中会产生几十个表,每个表中只有一条记录。

【问题讨论】:

    标签: android serialization object


    【解决方案1】:

    为什么不使用数据库?见Android Data Storage Guide

    【讨论】:

    • 数据库对这个应用程序没有意义...我想这样做,但它只是错误的技术。
    • 这就是他们在 10 年前所说的关于数据库驱动的 Web 的说法
    • 感谢您的屈尊...很有帮助。
    • 如果您提示您的应用程序的功能,您可能会得到更好的答案。否则,您将所有内容都限制在您当前的设计选择范围内,从而限制了人们可以给您的建议。
    【解决方案2】:

    上周我刚刚编写了一个基本上可以做到这一点的 android 应用程序。它在线获取一些(大)XML 文件,然后在各种视图中显示部分数据。

    我们通过使用 SAX 获取和解析 XML,然后(在解析时)将其全部写入 SQLite 数据库来实现。然后我们只是在每次需要显示数据集的某些视图时查询数据库。

    工作起来就像一个魅力,而且速度足够快,可以在谷歌地图叠加层上显示大量数据,我们在每次调用地图叠加层的 draw 方法时都会查询数据库。

    如果 XML 文档中的数据很容易在数据库中表示,我肯定会建议使用 SQLite database

    【讨论】:

      【解决方案3】:

      Android 序列化臭名昭著很慢。我强烈建议切换到使用 XML 或 JSON(或其他)并以这种方式写出文件。由于您已经拥有一个 XML 解析器,因此最有意义的做法是缓存您下载的原始 XML 文件并在必要时重新解析它。

      我之前在应用中从 Serializable 切换到 JSON 文件存储,速度提升令人难以置信,至少提高了一个数量级。

      (我可能误解了您的问题 - 我假设您正在使用 Serializable 写入光盘。如果您正在复制 XML,那么我不确定为什么它在 SD 卡上的速度要慢得多。另外,我同意 SQLite 数据库通常最有意义,但正如您已经说过的,它不适合您的应用程序的需求。)

      【讨论】:

      • 我正在认真考虑直接从服务器存储 XML 文件(并且可能会)......看起来就像在需要数据时反序列化对象“应该”比重新解析 XML 文件更快。
      • 对象序列化之所以有效,是因为它非常通用,而且通用代码运行速度很慢。此外,存储空间更大;我想我通过序列化将文件大小从 10+ KB 减少到了 1 KB 以下(这确实算作 gzip 压缩我的 JSON)。
      【解决方案4】:

      此外,除非您的数据至少为 100 KB,否则我建议您将其存储在您的私人数据存储中,而不是存储在 SD 卡上。请记住,您不能依赖可用的 SD 卡。

      【讨论】:

        【解决方案5】:

        如果 Web 服务只能为您提供指定数量的结果(例如:索引 1 和 10 之间的 requestData 或给我前 25 个结果)尝试使用它(放置一个简单的“加载更多结果”按钮或实现一个自动加载机制)。如果 Web 服务不提供此功能,请尝试将您的 xml 保存在 sdcard 上,并在需要数据时尝试仅解析指定数量的结果。希望对您有所帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-18
          • 2016-12-30
          相关资源
          最近更新 更多