在Drawable中使用位图的内存不足错误

时间:2012-12-26 18:28:38

标签: android sqlite bitmap drawable out-of-memory

我正在开发一款壁纸应用。我将所有图像存储在Drawable文件夹中。

当我添加超过30个壁纸时,我得到OutOfMemoryError。我想知道如何克服这一点。

我应该将所有图像保存在SQLite Database中,然后从那里加载,还是我必须做其他事情。

我已尝试通过Decode Bitmap Factory调整位图大小,但由于图像质量降低,因此无法实现我的目的。

3 个答案:

答案 0 :(得分:1)

在解码时调整图像大小只会提前移动OutOfMemoryError。该错误意味着您的应用程序泄漏了内存,或者试图使用比可用内存更多的内存。在Android上处理位图时,这种情况经常发生,因为限制设置在25MB左右,高分辨率屏幕越来越普遍。

您必须重新设计您的应用程序。没有必要在内存中保留30个图像,因为它们不能放在单个屏幕中 - 好吧,如果它们是缩略图大小,则在解码时将它们全部调整大小,并且内存中的像素总数与一张大图,所以你不会耗尽内存。

recycle()位图不可见时,您必须找到一种方法。如果您更好地描述您的应用程序,我们可以帮助您找到合适的时机,也可以预先加载图像以获得响应式应用程序和更好的用户体验。

答案 1 :(得分:0)

我认为你需要做的是在屏幕上显示Thumbnails而不是可绘制的图像。您可以生成Thumbnails并根据您的尺寸要求进行显示。每当用户点击Thumb时,只需采用原始路径并设置壁纸。

另一种选择是您可以使用Universal Image Loader来帮助您缓存光盘中的图像(例如SD card或您应用的Internal memory)。因此Out of Memory的问题可以解决。

答案 2 :(得分:-1)

如果您想控制应用程序崩溃,请在例外块中编写代码:

try {

    ...

    }
    catch(OutOfMemoryError error)  {
        //decide what to do when there is not more memory available
    }

另请点击此链接:

link