【发布时间】:2011-03-29 18:32:06
【问题描述】:
我正在开发的应用程序有一点问题。该应用程序显示了一个画廊,其中显示了 1 到 70 多张图片(一次一张),所有图片都是从网络下载的。
一开始我保存一张低分辨率图片,下载完所有低分辨率图片后,我开始下载高分辨率图片并替换它们。
当我开始下载高 dpi 的时候,问题就来了。下载一些后,我得到一个 memoryOutOfBoundsException(这是可以预料的)。
为了解决 android 中的这类问题,我看到了四个选项:
1.- 使用安卓缓存管理器。
这仅限于 Web 视图(所以我不能使用它们)。
2.- 每次用户通过图片时加载高分辨率图片。
这将使每次用户更改图片时都会出现分辨率不佳的图片,直到下载并切换高分辨率图片(正在加载到后台)。让应用看起来很糟糕。
3.- 创建某种可以容纳 5 张图片的 RAM 缓存,并使用类似于第二种方法的东西。
在这种情况下,我会尝试在 ram 中保存最接近正在显示(已下载或正在下载)的 5 张高分辨率图片,以便应用程序可以显示这些图片的高分辨率图片在用户看到低分辨率图片后,无需下载它们就可以在所选图片附近。
4.- 创建个人缓存管理器
在这种情况下,我将创建一个个人缓存管理器,将图片保存在 SD 卡上并在图库中使用这些图片。这也带来了一个问题,我将取决于设备上是否有 SD 卡的用户。为了解决删除应用后文件在设备上的问题(如果应用被删除),我将删除应用的 onDestroy() 方法中的所有文件(我不介意再次加载它们) )。
在我看来,最好的选择是第四个。方法,这迫使我依赖拥有 SD 卡的用户。
现在我的问题。
还有其他方法可以解决我的问题吗?
设备上是否还有其他类型的内存可以用来规避对 SD 卡的依赖?追问。是否建议使用这种内存或使用它会带来其他问题? (另外,关于它的教程将不胜感激。)
用户通常有 SD 卡还是第四个选项最差?
提前谢谢你。
【问题讨论】:
标签: android