【问题标题】:Custom ListView with many images gets Out Of Memory Exception具有许多图像的自定义 ListView 出现内存不足异常
【发布时间】:2012-06-21 22:09:02
【问题描述】:

我正在尝试创建一个类似于 Instagram 图片提要或 Facebook 的 Android ListView。加载一些图像(只有少数)后,我的 Galaxy Nexus 出现内存不足异常。我对它们进行了缩放,但是图像的数量不是固定的,理论上可以是无限的。在 Facebook 和 Instagram 上,他们会加载大量图片和其他数据,而且效果很好。

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

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

我将不胜感激任何意见! 谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    HTH

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

    【讨论】:

    • 我尝试了所有这些方法,在应用程序给出 oom 异常的列表中的 6-8 张图像后仍然购买。当当前项目需要它们时,我将图像设置在列表中,并且我只执行一次。
    • 我没有发布代码,因为我想听听其他人如何在一个 ListView 中处理数百张图片,以及是否有可能。
    • 我们中的大多数人都是使用上述方法来做的,所以你的代码一定有问题。
    • 你用 50 多张图片试过这个方法吗?喜欢 Instagram 订阅源?
    • 是的,我们已经在许多大型应用程序中做到了这一点。正如您可能从缺乏其他答案中看到的那样,这是一种常见的做法。
    猜你喜欢
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多