2011-12-08 11 views
12

因为在考虑发布问题和解决方案之前,我找不到任何人报告此行为,因此可以帮助其他人解决此问题。我们的应用程序在ICS之前的设备上确实很棒。我们测试了Galaxy Nexus的和ICS模拟器我们的应用程序,看到以下很怪进程崩溃:dlmalloc中的HEAP存储器损坏或Android ICS 4.0中的dlfree和SIGSEGV错误

堆内存损坏IN dlmalloc

堆内存损坏IN dlfree

信号11(SIGSEGV)故障地址deadbaad

问题是崩溃发生在本地空间,所以没有任何自写的代码直接影响它。由于我们在列表中处理了很多图像,并且系统为这些图像分配了位图,所以想到的唯一事情就是一些不好的位图处理。我们遵循网络中的所有最佳做法,我们甚至通过致电bitmap.recycle()帮助GC收集不必要的资源。无论如何,由于某些未知原因,应用程序在Android ICS 4.0上不断坠毁。

回答

23

经过一番调查,我删除了电话recycle(),现在一切都很顺利。看起来ICS中的垃圾收集器已经正确地清除了位图。我们对recycle()的调用导致系统尝试释放本地空间中的内存,但内存已被系统清除。不知何故,内存访问不良,系统崩溃。因此,如果您正在为Android ICS 4.0编程,并且遇到这些问题,则可能需要尝试不显式回收位图。

+1

是什么导致您尝试删除对recycle()的调用?我很好奇,因为我遇到类似的错误,但我没有任何对Bitmap.recycle()的调用。 – JonnyBoy

+0

我有同样的问题,并且取消了对'recycle()'的调用确实是这个工作。 – Houssni

+0

我有同样的问题,并删除'Bitmap.recycle()'修复它。没有一个有用的日志,真的很难找到导致问题的原因。谢谢@MarioB – Rami

0

如果您先针对ICS编译应用程序,则不需要显式调用回收,因为这会导致信号11(SIGSEGV)错误。

+7

好吧,这基本上就是我上面提到的oO –

+2

如果你正在编写一个响应来复制别人的回复,请尝试添加一些肉对它来说,就像链接到证明肯定的文档。 – Frederic