如何在Android Studio中读取事件探查器.hprof内存堆转储?

问题描述 投票:0回答:1

我正拼命寻找内存泄漏,我想知道如何读取内存堆转储:

enter image description here

enter image description here

  • 例如,这是否意味着MainActivity有效两次?还是只是它两次在后堆栈中?
  • 为什么我的TrackingService被叫两次?它在启动时被激活,然后基本上被应用程序的其余部分遗忘了。

  • ChooseLoginRegistrationActivity怎么了?是在后堆栈中3到5次吗? Lambda这两个奇怪的活动是什么?在“ startActivity()”之后,ChooseLoginRegistrationActivity总是以finish()结尾,它甚至应该在这里弹出吗?

  • 当我在某个活动上调用finish()时,分配给该活动的内存会在garbage collector的下一次迭代中释放吗?因为当我在gc中手动调用profiler时,没有释放内存,等待也无济于事。进入已释放的智能手机的桌面(约占应用程序内存的50%),再返回该应用程序,则不会收回内存。

android android-studio memory heap-memory profiler
1个回答
0
投票

有点晚,但是使用Eclipse MAT可能会有用。您可以从Android Studio Profiler创建一个堆转储,并将其转换为标准.hprof,以便将其导入Eclipse MAT。

Android \ Sdk \ platform-tools]中(要访问可用于转换转储的hprof-conv工具),打开终端并键入命令

hprof-conv AS-name.hprof EclipseMAT-name.hprof

这将使用给定的EclipseMAT-name

名称生成一个转换后的文件,您可以使用该文件将适当的标准堆转储导入Eclipse MAT。导入MAT后,您可以查看给定堆中的内存概览,甚至可以获取泄漏可疑事件的自定义报告,这可能使您更接近那些可怕的OOM错误的根源。

LeakCanary还可证明对发现这些讨厌的错误有用。

希望这可以帮助您和其他任何人查找内存错误。

© www.soinside.com 2019 - 2024. All rights reserved.