【问题标题】:Out Of Memory Error Using Bitmaps in Drawable在 Drawable 中使用位图时出现内存不足错误
【发布时间】:2025-12-12 21:40:01
【问题描述】:

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

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

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

我尝试通过Decode Bitmap Factory 调整位图大小,但由于图像质量降低,它没有达到我的目的。

【问题讨论】:

  • 你有没有尝试实现延迟加载的概念???
  • 我是 android 新手,所以我不知道惰性编码.....

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


【解决方案1】:

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

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

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

【讨论】:

  • 实际上在我的应用程序中,我在主页上显示壁纸的类别,然后如果用户单击特定类别,则该类别中的所有壁纸都显示在滚动视图中,并且用户选择特定壁纸成为他的壁纸。
  • 当我在模拟器上运行我的应用程序时它崩溃了,在 Logcat 中它说 OutOfMemory Exception。当我减少图像数量而不是完美运行时,我没有收到任何错误。
  • 我的意思是触发错误的原因。查看类别缩略图?
  • 有多少个类别,它们的缩略图有多大?另外,您应该发布相关代码
【解决方案2】:

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

另一个选项是您可以使用Universal Image Loader,它可以帮助您将图像缓冲在磁盘中(例如SD card 或您的应用程序的Internal memory)。所以Out of Memory的问题可以解决。

【讨论】:

  • 我会尝试你提到的程序,然后告诉你。
【解决方案3】:

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

try {

    ...

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

也请点击此链接:

link

【讨论】:

  • 我试图避免 OutOfMemory,因为当它发生时我无能为力。