在Android上保存数据的build议?

有一个Web服务提供了我的应用程序使用的一些数据。 这个数据是相当大的,只是非常less有变化,所以我认为这将是很好的,如果应用程序可以caching在SD卡上,只有根据需要进行更新。

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

有没有人有任何改善这个build议或替代想法坚持这个数据(除了只保存XML文件,每次重新parsing)?

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

Solutions Collecting From Web of "在Android上保存数据的build议?"

Android序列化速度非常慢。 我强烈build议切换到使用XML或JSON(或其他),并写出这样的文件。 既然你已经有了一个XMLparsing器,那么最好的方法就是caching你下载的原始XML文件,并根据需要重新parsing它。

我之前已经从一个应用程序中从Serializable切换到JSON文件存储,并且速度的提高是不可思议的,至less有一个数量级。

(我可能会误解你的问题 – 我假设你正在使用Serializable来写入光盘,如果你正在复制XML,那么我不知道为什么SD卡上的速度太慢了,而且我同意SQLite数据库通常是最有意义的,但正如您已经指出,它不适合您的应用程序的需求。)

另外,除非你的数据至less有100个Kb,否则我build议把它存储在你的私人数据存储器而不是SD卡上。 请记住,您不能依靠可用的SD卡。

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

我们通过使用SAX获取和parsingXML来完成这个工作,并且(在parsing的时候)把它全部写到一个SQLite数据库中。 然后每次我们需要显示数据集的一些视图时,我们只是查询数据库。

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

所以我肯定会build议去SQLite数据库 ,如果XML文档中的数据很容易在数据库中表示。

如果Web服务可以给你一个指定数量的结果(例如:索引1和10之间的requestData或给我前25个结果)尝试使用它(把一个简单的“加载更多的结果”button或实现自动加载机制)。 如果Web服务没有提供这个function,那么尝试在SD卡上保存你的XML,当你需要的数据尝试parsing只是指定数量的结果。 希望这个帮助!

你为什么不使用数据库? 请参阅Android数据存储指南