2013-08-07 57 views
1

我正在处理一段内存泄漏的应用程序,经过一段时间后,该用户使用它。我可以通过查看堆大小和分配来使用heap选项卡检查DDMS中的数据。使用Eclipse内存分析器查找内存泄漏

在应用程序中,用户总是可以使用设备Camera拍摄图像,绘制图像并将其保存在系统中。

通过用户在系统中创建的每条记录,分配的内存都在增加一点点,并且在特定数量的记录发生内存泄漏之后。

我导出DDMS中的.hprof,并将其转换为eclipse memory analyzer从Android sdk文件unisg hprof-conv。 我跟随几个链接,看看问题来自哪里,如:

Google I/O 2011: Memory management for Android Apps

10 Tips for using the Eclipse Memory Analyzer

我还是找不到问题的根源。这是SkyDrive的Mat.hprof文件:https://skydrive.live.com/#cid=2EB3385F103C2550&id=2EB3385F103C2550%21105

任何人都可以看看这个文件,并给我一些提示,问题来自哪里?或任何改善建议?

回答

0

您是否尝试比较MAT中的2个hprof文件?

在直方图视图中有一个选项“与另一个堆转储进行比较”。它会告诉你之间的2 HPROF文件的差异,那么这将是更容易找到你的内存泄露

0

很简单:

- 打开你的场,然后使用支配树: enter image description here

您可以看到2个保留在堆栈中的大对象,一个来自资源和一个位图。 - 使用鼠标右键单击显示的最短路径,以GC的位图:

enter image description here

那里,你可以看到答案。在您的应用程序中,您的res文件夹中可能包含一个大图像。 问题是,当您直接在布局中使用此图像时,这可能会导致内存不足错误。你需要使用本教程,以避免内存泄漏以编程方式加载位图:

http://developer.android.com/training/displaying-bitmaps/index.html

0

后,我有加载MAT你.hprof文件,我看到你的应用程序从内部产生了很多与嵌套集合数组发生OutOfMemoryError。那么是什么原因?为了在AutoCompleteTextView中获得结果,您使用的处理程序可能会导致内存泄漏,它可以最终为当前视图和您的活动提供强有力的参考。在生命周期事件发生时,您应该更多地关注收集发布过程。