我的问题涉及内存,我有一个为我提供 URL 列表的 Web 服务。每个URL对应一个大图像。我的移动应用程序必须解析 Web 服务提供的 xml,然后在 GridView 中显示这些图像。我尝试了多种功能来显示图像,例如:
多线程
延迟加载
使用 inSampleSize 减小图像大小(这会导致我的应用花费太长时间)
我是否应该为每个大图像附加一个缩略图,并使网络服务返回所有缩略图的列表,然后向用户显示这些缩略图,如果他点击其中一个比我有为了在单独的 View 中显示大图像,我有这个想法,因为我注意到当我显示一张图像时我没有得到内存不足异常!!
这是一个可靠的解决方案吗? 有更好的方法吗?
最佳答案
欢迎来到 Android 上最难的问题之一。首先我会从 reading this new documentation google wrote on how to handle bitmaps 开始。这本书读起来并不轻松,但您可能需要从头到尾读完。它才上线几周,所以你可能还没有看到它。它详细介绍了您提到的许多内容,例如多线程、延迟加载和下采样。他们还建议使用图像缓存。
下载每个图像的大图像然后进行下采样将是非常低效的。首先,下载大小大于所需大小。其次,您需要将其加载到内存中以执行下采样,第三下采样有点慢。
我会让 Web API 返回一个缩略图 url 和完整图像 url 列表,您可以在 View 出现在屏幕上时延迟下载,并使用缓存将它们保留一段时间。确保您也缩小了缩略图的大小。然后,当用户单击图像时,我会下载完整图像,并在图像到达时在背景上对其进行采样,然后再显示它。
关于android - 在 GridView 中加载多个大图像的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10965036/