Android解除分配Bitmaps进入“未知”内存

Android解除分配Bitmaps进入“未知”内存,第1张

概述我正在制作一个草图应用程序,主要是为了好玩.但我遇到了一个问题. 在我的应用程序中,用户可以“翻转”他们已经绘制的草图.这些草图只是400×800位图.但我经常遇到内存不足的错误. 一旦用户从它们中翻转,草图就会保存到SD,然后将它们释放出来…… if(bitmap != null){bitmap.recycle();bitmap = null;} 因此,在保存和取消分配之前,任何给定时间 我正在制作一个草图应用程序,主要是为了好玩.但我遇到了一个问题.

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

一旦用户从它们中翻转,草图就会保存到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上解除分配(本机和JVM堆相似)

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

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

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

解决方法 使用大图像(也靠近1mb).您可能在应用程序标记集大堆true中使用androIDmanifest而不是使用自定义view不使用imagevIEw(因为太复杂且需要比其他视图更多) 总结

以上是内存溢出为你收集整理的Android解除分配Bitmaps进入“未知”内存全部内容,希望文章能够帮你解决Android解除分配Bitmaps进入“未知”内存所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1135452.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存