2011-02-28 24 views
1

我正在构建一个应用程序,从服务器获取XML,然后解析它(它的DIDL格式在地方)。目标是尽可能多地加载到内存中,以方便用户浏览(以便快速滚动结果),但我一直在获取OutOfMemoryError。我对Android很陌生,看起来虚拟机真的很挑剔。我加载的不超过一兆字节的XML,并且几乎立即丢弃它。我应该怎么做才能防止这些错误发生?Android的OutOfMemoryError与XML

我是否应该通过网络加载文件块,将其写入磁盘,然后将块加载回内存并将其解析为内存,将所有内容解析为POJO?如果可以避免的话,我不想实现某种形式的分页,就像Twitter应用程序一样(当你点击底部时它用来加载更多的条目,它现在一次加载很多,并且同样崩溃一个OOM错误。)如果有帮助,我正在运行Nexus One,CM7/Android 2.3.3。

回答

2

你可以阅读这个不错的article关于Android上的XML解析。使用pull语法分析器对你来说是很好的选择,因为它不需要将完整的文档读入内存,这是你的情况。我建议将解析后的结果存储到数据库中,因为一旦它们在那里,您可以快速列出它们并以任何您想要的方式将它们分页,并且数据库的性能非常好。这样,您只需要将完整的数据从服务器加载到数据库一次(如果服务器上的数据没有更改),或者加载一次,然后在更新时不时更新(例如推特)。

+0

这很有道理。我想我会研究这个。我正在使用一个API来处理所有这些东西(解析,加载到内存等),所以我将不得不将其全部解决,并弄清楚如何为我推出自己的HTTP请求并解析我的自己的结果,但是,这是一个好的开始。它也肯定会提高应用程序的性能,并逐个解析元素并将它们添加到列表中。 – 2011-02-28 21:55:31

1

将所有对象声明移出循环,并在使用后将它们取消。并经常使用System.gc()(相信我,它的工作原理)。尽可能少地使用类级对象。执行您的应用程序并继续关注Logcat日志。