我的应用程序运行良好(即没有崩溃)。在测试期间,我一直在调查内存使用情况。我使用 Android Studio (AI-141.2006197) DDMS 输出 Dump HPROF 文件,然后在 Eclipse 内存分析器中打开它。该工具描述了一个泄漏嫌疑人:
One instance of "android.graphics.Bitmap" loaded by "<system class loader>" occupies
2,536,984 (40.81%) bytes. The memory is accumulated in one instance of "byte[]"
loaded by "<system class loader>".
Keywords
byte[]
android.graphics.Bitmap
来自 dominator_tree 的更多信息:
在过去的一天里,我已经将我的应用程序的打开活动和片段剥离到了裸露的基础上,删除了所有打开和对位图的引用,删除了菜单、服务等所有内容。剩下的就是一个包含 1 个片段的活动。该片段有一个 ListView,每个列表项都有一个简单的 TextView。不使用位图。如果需要,我可以在稍后对此问题的编辑中显示代码。
我正在手机和平板电脑上测试这个精简的应用程序。我安装应用程序,启动它,看到第一个片段显示的列表,然后退出。通过 DDMS,我引发 GC,然后进行堆转储并在 Eclipse 内存分析器中检查它。对于手机和平板电脑,我都看到了“潜在的”内存泄漏。
我的测试手机使用 cynogenmod ROM,具有“允许清除资产”的性能设置选项(请参阅http://pocketnow.com/2012/12/10/5-nexus-4-speed-tips#toc- 5)。当我启用此功能时,我潜在的内存泄漏就会消失。这让我觉得我的应用程序毕竟没有问题,但它的一些系统行为我不明白。
一些问题:
- 这可能是我的应用程序中的内存泄漏吗?
- 如果我的测试应用程序没有使用位图或可绘制对象,为什么要为位图分配内存?我可以检查什么?
- 关于解释 Eclipse 内存分析器报告的哪些潜在内存泄漏可以忽略,您有什么智慧的话吗?
提前致谢。我来自嵌入式实时 C 背景,所以当我看到内存泄漏时会非常紧张!