11

由于在我考虑在此处发布问题和我的解决方案之前找不到任何人报告此行为,因此它可以帮助遇到此问题的其他人。我们的应用在 ICS 之前的设备上运行良好。我们在 Galaxy Nexus 和 ICS 模拟器上测试了我们的应用程序,发现了以下类型的奇怪进程崩溃:

dlmalloc 中的堆内存损坏

dlfree 中的堆内存损坏

信号 11 (SIGSEGV),故障地址 deadbaad

问题是崩溃发生在本机空间中,因此没有任何直接影响它的自行编写的代码。由于我们处理列表中的大量图像,并且系统为这些图像分配位图,唯一想到的是一些糟糕的位图处理。我们遵循了网络上的所有最佳实践,我们甚至帮助 GC 通过调用bitmap.recycle(). 无论如何,由于某些未知原因,该应用程序在 Android ICS 4.0 上不断崩溃。

4

2 回答 2

22

经过一番调查,我删除了对的调用,recycle()现在一切正常。似乎 ICS 中的垃圾收集器已经正确清除了位图。我们的调用recycle()导致系统尝试释放本机空间中的内存,但内存已被系统清除。不知何故,发生了错误的内存访问,系统崩溃了。因此,如果您正在为 Android ICS 4.0 编程并且遇到这些问题,您可能想尝试不显式回收您的位图。

于 2011-12-08T12:23:42.273 回答
0

如果您继续针对 ICS 编译您的应用程序,则无需显式调用回收,因为这将导致信号 11 (SIGSEGV) 错误。

于 2012-03-03T11:31:16.397 回答