在android上下载图像的内存管理问题

时间:2011-03-29 18:32:06

标签: android

我正在处理一个应用程序的问题。该应用程序显示了一个库,显示1到70多张图片(一次一张),全部从网上下载。

首先我保存了一张低分辨率图片,在我完成所有低分辨率图片的下载后,我开始下载高分辨率图片并替换它们。

当我开始下载高dpi的问题时,问题出现了。下载一些后,我得到一个memoryOutOfBoundsException(可以预料)。


为了解决android中的那种问题,我看到了四个选项:

1.-使用androids缓存管理器。

这仅限于网页视图(所以我不能使用它们)。

2.-每次用户通过图片时加载高分辨率图片。

这将使每次用户更改图片时出现错误的分辨率图片,直到下载并切换高分辨率图片(在背景上加载)。使应用程序看起来很糟糕。

3.-创建某种RAM缓存,可以容纳5张图片并使用第二种方法。

在这种情况下,我会尝试在ram中拥有最接近正在显示的(下载或正在下载的)图片的5个高分辨率图片,以便应用程序可以显示高分辨率图片在用户看到低分辨率图像后,无需下载它们就在所选择的附近。

4.-创建个人缓存管理器

在这种情况下,我将创建一个个人缓存管理器,将图片保存在SD卡上并在图库中使用这些图片。这也带来了一个问题,我将依赖用户在设备上安装SD卡。为了解决删除应用程序后文件停留在设备上的问题(如果应用程序被删除),我将删除应用程序的onDestroy()方法中的所有文件(我不介意再次加载它们) )。


在我看来,最好的选择是第四种。方法,迫使我依赖于拥有SD卡的用户。

现在我的问题。

还有其他方法可以解决我的问题吗?

设备上是否有其他类型的内存可用于逃避SD卡的依赖性?跟着这个问题。是建议使用那种内存还是使用它带来其他问题? (此外,有关它的教程将被证实。)

用户通常是SD卡还是最差的第四种选择?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我会编写自己的缓存管理器。如果用户只能在列表中向左和向右加载图片,我会尽可能将这三张图片保存在内存中,并在每次用户导航到新图片时进行切换。我不确定你的应用程序是否有效,但这是一种做法。如果您无法预测用户的下一个选择,可能会有一个循环缓存并尝试一次可以容纳多少内存(不知道文件大小的最佳,最差和平均情况,我真的不会说太多在那)。

你可能已经知道了,但总是值得一提。当你使用Bitmaps时,任何时候你完成它...真的完成它(比如从缓存中刷新它),调用它的循环方法。这似乎是回收系统内存的最快和最广泛接受的方式。