关于在Android上保留数据的建议?

时间:2010-01-07 21:05:07

标签: android serialization object

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

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

有没有人有任何建议可以改进这个或备用的想法来保存这些数据(除了每次保存XML文件和重新分析)?

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

5 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:-2)

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