1

我的应用程序运行良好(即没有崩溃)。在测试期间,我一直在调查内存使用情况。我使用 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 的更多信息:

路径2gc

在过去的一天里,我已经将我的应用程序的打开活动和片段剥离到了裸露的基础上,删除了所有打开和对位图的引用,删除了菜单、服务等所有内容。剩下的就是一个包含 1 个片段的活动。该片段有一个 ListView,每个列表项都有一个简单的 TextView。不使用位图。如果需要,我可以在稍后对此问题的编辑中显示代码。

我正在手机和平​​板电脑上测试这个精简的应用程序。我安装应用程序,启动它,看到第一个片段显示的列表,然后退出。通过 DDMS,我引发 GC,然后进行堆转储并在 Eclipse 内存分析器中检查它。对于手机和平板电脑,我都看到了“潜在的”内存泄漏。

我的测试手机使用 cynogenmod ROM,具有“允许清除资产”的性能设置选项(请参阅http://pocketnow.com/2012/12/10/5-nexus-4-speed-tips#toc- 5)。当我启用此功能时,我潜在的内存泄漏就会消失。这让我觉得我的应用程序毕竟没有问题,但它的一些系统行为我不明白。

一些问题:

  1. 这可能是我的应用程序中的内存泄漏吗?
  2. 如果我的测试应用程序没有使用位图或可绘制对象,为什么要为位图分配内存?我可以检查什么?
  3. 关于解释 Eclipse 内存分析器报告的哪些潜在内存泄漏可以忽略,您有什么智慧的话吗?

提前致谢。我来自嵌入式实时 C 背景,所以当我看到内存泄漏时会非常紧张!

4

2 回答 2

1

此位图是系统相关的,而不是 App 中的内存泄漏。我通过帖子得出了这个结论Android EdgeEffect 似乎使用 1 Mb of Heap分配了一个 1 meg 位图和Strange Bitmap 。

对于阅读本文的任何人,我想提请您注意另一篇非常有用的帖子,该帖子向我展示了如何查看 Eclipse 内存分析器工具指向的位图。这对调试很有帮助。请参阅MAT (Eclipse Memory Analyzer) - 如何从内存转储中查看位图

于 2015-10-12T00:23:00.340 回答
0

所有视图都生成自己的位图缓存。这很可能是内存泄漏。当视图上的布局更改频繁时,似乎会发生这种情况。您可以尝试禁用缓存以查看它是否可以解决您的问题:

view.setDrawingCacheEnabled(false);
于 2015-06-17T18:02:04.147 回答