具有许多图像的自定义ListView获得Out of Memory Exception

时间:2012-06-21 22:09:02

标签: android listview out-of-memory android-image

我正在尝试创建一个看起来像Instagram图片Feed或Facebook的Android ListView。在加载一些图像(仅少数几个)后,我的Galaxy Nexus出现了Out of Memory Exception。我缩放了它们,但是,图像的数量并不固定,理论上可以是无限的。在Facebook和Instagram上,他们加载了大量图像和其他数据,效果很好。

你怎么看?我可以通过原生Android编码实现这些表现吗? 如果我要创建一个HTML5提要(如Facebook和Instagram),我会避免内存问题吗?

我感到很奇怪,我需要做很多工作来处理来自服务器的图像的内存。如果这是唯一的解决方案,那么在本机ListView中管理数百张图片的方法是什么?

我会感激任何意见! 感谢。

1 个答案:

答案 0 :(得分:5)

不要一次将它们全部加载到内存中,只需将需要显示的图像加载到Bitmap个对象中;并确保您加载的图像只是您需要显示的尺寸(不要完全加载1900x1200图像以显示300x200缩略图)。您的应用程序的堆大小约为30MB(取决于设备,但这是一个很好的经验法则),一旦加载,Bitmap将占用内存中的宽度*高度* 4 字节。

一种方法是在下载图像时将图像缓存到磁盘上,这样它们就不必在内存中,并且在下载之前总是检查缓存中的图像。您还可以使用缓存将少量图像加载到需要在列表中显示的内存中。

您还可以使用BitmapFactory.Options.inSampleSize选项在图像加载时减小图像的大小,而不是加载整个图像,然后创建一个小的副本,这会浪费时间和内存。

HTH

请查看:http://developer.android.com/training/displaying-bitmaps/index.html寻求帮助