android - 从大型 XML 填充 ListView

标签 android xml listview memory-management

我正在进行一个包含 ListView 的 Activity 。 ListView 由从服务器提取的大型 XML 填充。 我的场景通常是有一个 SAX 解析器,解析 XML 并返回一个带有解析数据的 Vector(或类似结构)。 问题是 xml 太大,Vector 的元素太多,导致内存不足错误。 xml 还包含指向正在下载的图像的链接,这使情况变得更糟。

在这种情况下我应该如何管理内存?我在想是否可以让图像仅在用户滚动到 ListView 中的给定行时加载。

最佳答案

内存不足异常的问题是图片的加载。 AdapterListView 中填充自身应该没有问题。

在业务应用程序中,我正在加载一个包含 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/

相关文章:

android - 是否可以使用 Ormlite 执行原始 SQL?

java - 帮助解析 RSS 提要。所有元素返回 null

android - 如何在滚动 ListView 上显示类似 Whatsapp 的日期

WPf ListView : Save reorderd column order

android - 如何更改图库的属性

Android In App 购买不会立即跨多个设备同步

java - Android MPChart : drawing lines of different plots on the same activity in different colors

java - 解析XML,我没有错误,我不知道出了什么问题?

xml - XSL FO 继续/运行表,页脚中的标记

android - 知道 ListView 中的 View 何时离开屏幕?