代码之家  ›  专栏  ›  技术社区  ›  Jeremy Logan

在Android上保存数据的建议?

  •  8
  • Jeremy Logan  · 技术社区  · 15 年前

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

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

    是否有人有任何建议来改进这一点或其他方法来保存这些数据(而不仅仅是每次保存XML文件和重新分析)?

    更新: 这不仅仅是一个微不足道的记录集合。对象图实际上非常复杂,将其存储到数据库中会导致许多表,每个表中只有一条记录。

    5 回复  |  直到 9 年前
        1
  •  10
  •   Dan Lew    15 年前

    Android序列化是 臭名昭著地 慢。我强烈建议切换到使用XML或JSON(或其他)并以这种方式编写文件。因为您已经有了一个XML解析器,所以缓存下载的原始XML文件并在必要时重新对其进行分析可能是最有意义的。

    我以前在一个应用程序中已经从可序列化转换为JSON文件存储,并且速度的提高是令人难以置信的,至少达到了一个数量级。

    (我可能误解了你的问题——我想你是在用序列化来写光盘。如果您正在复制XML,那么我不确定为什么它在SD卡上慢得多。另外,我同意sqlite数据库通常是最有意义的,但是正如您已经说过的,它不适合您的应用程序的需要。)

        2
  •  3
  •   hackbod    15 年前

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

        3
  •  0
  •   Bjarke Freund-Hansen najhi ullah    15 年前

    上周我刚刚写了一个Android应用程序,基本上就是这么做的。它联机获取一些(大型)XML文件,然后在各种视图中显示部分数据。

    我们通过使用SAX获取和解析XML,并(在解析时)将其全部写入一个sqlite数据库来完成这项工作。然后,每次需要显示数据集的一些视图时,我们都只是查询数据库。

    工作起来很有魅力,而且速度足够快,可以在Google地图覆盖图上显示大量数据,我们在每次调用地图覆盖图的draw方法时都会查询数据库。

    所以我绝对建议你去 SQLite database ,如果XML文档中的数据很容易在数据库中表示。

        4
  •  0
  •   Ungureanu Liviu    15 年前

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

        5
  •  -2
  •   Maksym Gontar    15 年前

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