我正在进行一个包含 ListView 的 Activity 。 ListView 由从服务器提取的大型 XML 填充。 我的场景通常是有一个 SAX 解析器,解析 XML 并返回一个带有解析数据的 Vector(或类似结构)。 问题是 xml 太大,Vector 的元素太多,导致内存不足错误。 xml 还包含指向正在下载的图像的链接,这使情况变得更糟。
在这种情况下我应该如何管理内存?我在想是否可以让图像仅在用户滚动到 ListView 中的给定行时加载。
最佳答案
内存不足异常的问题是图片的加载。 Adapter
在 ListView
中填充自身应该没有问题。
在业务应用程序中,我正在加载一个包含 9000 条记录的 ListView
,每行有 2 个 TextView
。所以我想数据的大小应该不是问题。
使用AsyncTask
从服务器获取数据。在 doInBackground()
方法中解析并填充适配器,然后在 onPostExecute()
中在 ListView
中设置适配器。首先尽量不要包含任何图像,以确保数据大小不是问题。
如果 ListView
正确加载,则尝试找到填充图像的方法。执行此操作有多种方法。如果图像一遍又一遍地相同,您应该尝试“在内存中缓存”实现,否则也许从后台线程“延迟加载”应该可以很好地完成这项工作。
编辑:
这是一篇关于如何从后台线程延迟加载图像的非常好的帖子/教程。当您在 GridView
中查看所有应用程序时,它“几乎”与 android market 使用的技术相同,起初有一些灰色图标,然后突然出现应用程序的图像。这是从后台线程完成的,当确切的行对用户可见时,后台线程会从互联网上获取它,填充列表并将其缓存在内存中以便立即再次可用。 Lazy load of images in ListView
关于android - 从大型 XML 填充 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11608247/