我正在开发一款壁纸应用。我将所有图像存储在Drawable文件夹中。
当我添加超过30个壁纸时,我得到OutOfMemoryError
。我想知道如何克服这一点。
我应该将所有图像保存在SQLite Database
中,然后从那里加载,还是我必须做其他事情。
我已尝试通过Decode Bitmap Factory
调整位图大小,但由于图像质量降低,因此无法实现我的目的。
答案 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
}
另请点击此链接: