有时,尤其是在我的应用程序中实现新功能时,我会使用 DDMS + HPROF 来分析内存和堆使用情况。由于该应用程序似乎没有任何性能-ANR 问题并且一切运行顺利,最初我并不关心它 - 但现在,我看到它的大小几乎总是相同,我想知道它到底能做什么是。
每次运行 HPROF 时,我都会检查泄漏嫌疑人选项卡。总会有一个android.graphics.Bitmap
实例占用所有已用堆的大约 25%。
我想进一步了解那是什么,所以我打开了支配树,看到了这个:
所以基本上有一个巨大的byte[]
实例保留了大量的堆,并且永远不会被释放。根据this,我复制了 that 的值byte[]
,将其转储到.data
文件中,用 Gimp 打开,结果如下:
所以基本上,它看起来像 PNG 图像的“alpha(0)”部分。考虑到以下事实:
- 我所有的图像文件的大小都小于 8K
- 只有其中一些是PNG - 剩下的我能够转换为JPG,我做到了
- 不管我是否添加更多图像,从应用程序开始(4 个月前)开始,图像的大小
byte[]
始终大致相同 - 为了调试它,我尝试从and文件夹中删除任何图像文件并在没有任何可绘制资源的情况下运行应用程序,并且仍然存在
drawable
drawable-xxx
byte[]
- 我删除了几乎所有的布局,只保留了基本的功能和相同的结果
- 在支配树中,根类是
android.graphics.Bitmap
任何人都知道这是什么byte[]
,如果我应该做些什么来释放它?
任何帮助表示赞赏!