我正在尝试创建一个看起来像Instagram图片Feed或Facebook的Android ListView。在加载一些图像(仅少数几个)后,我的Galaxy Nexus出现了Out of Memory Exception。我缩放了它们,但是,图像的数量并不固定,理论上可以是无限的。在Facebook和Instagram上,他们加载了大量图像和其他数据,效果很好。
你怎么看?我可以通过原生Android编码实现这些表现吗? 如果我要创建一个HTML5提要(如Facebook和Instagram),我会避免内存问题吗?我感到很奇怪,我需要做很多工作来处理来自服务器的图像的内存。如果这是唯一的解决方案,那么在本机ListView中管理数百张图片的方法是什么?
我会感激任何意见! 感谢。
答案 0 :(得分:5)
不要一次将它们全部加载到内存中,只需将需要显示的图像加载到Bitmap
个对象中;并确保您加载的图像只是您需要显示的尺寸(不要完全加载1900x1200图像以显示300x200缩略图)。您的应用程序的堆大小约为30MB(取决于设备,但这是一个很好的经验法则),一旦加载,Bitmap
将占用内存中的宽度*高度* 4 字节。
一种方法是在下载图像时将图像缓存到磁盘上,这样它们就不必在内存中,并且在下载之前总是检查缓存中的图像。您还可以使用缓存将少量图像加载到需要在列表中显示的内存中。
您还可以使用BitmapFactory.Options.inSampleSize
选项在图像加载时减小图像的大小,而不是加载整个图像,然后创建一个小的副本,这会浪费时间和内存。
HTH
请查看:http://developer.android.com/training/displaying-bitmaps/index.html寻求帮助