gpt4 book ai didi

Android解除分配位图进入 "unknown"内存

转载 作者:IT王子 更新时间:2023-10-28 23:38:36 29 4
gpt4 key购买 nike

我正在制作一个素描应用程序,主要是为了好玩。但是我遇到了问题。

在我的应用中,用户可以“翻转”他们已经绘制的草图。这些草图只是 400x800 位图。但是我经常遇到内存不足的错误。

用户一离开草图,草图就会被保存到 SD,然后它们会被释放...

if(bitmap != null)
{
bitmap.recycle();
bitmap = null;
}

因此,在任何给定时间,在保存和释放它们之前,只应将一两个位图加载到内存中。通过一些调试打印,我确定这是真的(内存中最多同时有两个位图)。我的问题是,在 14 次加载/释放后,程序崩溃并出现 OutOfMemoryError。总是 14,无论我在“翻转”之间等待多长时间。

我尝试打开 DDMS 来查看设备的内存分配情况。奇怪的是,每次释放图像时,内存都会进入“未知”部分,而不是“空闲”部分。这种情况一直持续到只剩下一小片“空闲”内存,此时发生崩溃(并且“未知”内存变为“空闲”)。

经过大量谷歌搜索,我发现一些资源说位图应该是 deallocated as expected ,以及 Dalvik garbage collections always occur before an out of memory error .还有一些杂项页面表明 Bitmap 使用的所有内存都在 GC 时释放( native 堆和 JVM 堆类似)

我应该注意到,在这一点上,我正在两部不同的手机上进行测试。摩托罗拉 Droid X(库存图片,Android 2.3.3)和三星 Galaxy S3(Cyanogenmod 9,Android 4.0.4)。两者都表现出完全相同的行为。我的 android 工具在所有 SDK 版本中都是最新的,我已经检查了一百万次以确保我的代码中没有其他任何东西在做任何奇怪的分配(在程序启动后几乎没有分配任何东西)。

那么,我应该如何正确地释放位图以使其被释放(不仅仅是“未知”),并且我可以在其他地方使用内存?作为一个补充问题,这个“未知”的内存池是什么,它的用途是什么?

编辑:语法和拼写,在平台上添加了一些注释。

最佳答案

使用大图(附近也有 1mb)。您可能会在应用程序标记集大堆 true 中使用 androidmanifest。而不是使用自定义 View 而不使用 imageview(因为太复杂并且需要比其他 View 更多)

关于Android解除分配位图进入 "unknown"内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13217081/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com