0

在处理位图时,我的 android 应用程序出现了一些内存问题(呃!)。

我们有多个活动从服务器加载图像,这可能是活动的背景图像。对于多个活动,这个背景图像可能是相同的,现在每个活动都在加载自己的背景图像。这意味着如果流程是 ac1->ac2->ac3->ac4,则相同的图像将被加载 4 次并使用 4x 内存。

如何针对这种情况优化图像处理?我是否创建存储图像的图像缓存,然后每个活动首先向缓存询问图像。如果是这种情况,我怎么知道何时从缓存中垃圾收集图像?

非常感谢任何建议、指向好的教程或类似内容的链接。

问候

编辑:在为设备下载图像时,会使用确切的尺寸,这意味着如果 ui 元素需要 100x100 像素的图像,它会获得该尺寸,因此不需要缩放。所以我不确定在将图像加载到内存时是否会缩小图像。可能需要在下一个移动时卸载活动中的图像,然后在返回时重新加载。

4

2 回答 2

0

您可能想尝试的一件事是将您的位图(制作缩略图)缩小到更适合您的设备的大小。如果您不按比例缩小它,那么使用位图快速用完 Android 设备上的所有 RAM 非常容易。这个食谱展示了如何在飞行中做到这一点。您可以调整它以将图像保存到磁盘。

您还可以创建自己的LRUCache实现来缓存应用程序的图像。

于 2013-06-26T20:39:03.587 回答
-1

准备好你的更新后,我会给你另一个提示。如果人们想要,我仍然可以发布补丁..

你需要对这些位图做的是用 using 块调用它们。这样,Android 将在执行该块后立即卸载位图。

例子:

using(Bitmap usedBitmap = new Bitmap()){
     //Do stuff with the Bitmap here
     //You can call usedBitmap.Dispose() but it's not really needed
}

使用此代码,您的应用程序不应将所有使用的位图保存在内存中。

于 2013-06-28T12:37:22.383 回答