2

我正试图分析Android应用程序的内存使用情况。我这样做,使用GC是否保证释放未使用活动的内存

adb shell dumpsys meminfo <package name> 

我的应用程序只有一个Activity,我大概重复步骤如下次打:

  1. 打开应用程序;
  2. 退出使用返回按钮

这样做的时候dumpsys十几显示,大约1-2我的Activities的情况下,仍然在内存中之后。在我点击adb dumpsys几次后,Activity计数降为零。这是正常的吗?如果这是一个泄漏,我不认为Activity计数为零。这是否意味着GC缓慢地要求记忆Activity对象?

+0

尝试使用LeakCanary https://github.com/square/leakcanary分析应用程序的内存使用情况。您将能够更轻松地查明问题。 –

+0

@EricBachhuber谢谢。我确实使用了泄漏金丝雀,并摆脱了泄漏。我现在留下的只是误报,Leak Canary认为活动已经泄露,后来又说“GC正在懒惰”。所以我认为泄漏金丝雀明智我没有泄漏。 – Bajji

回答

2

这是否意味着GC声称缓慢记录活动对象?

通过按下后退按钮完成Activity并不意味着它的实例将立即死亡并且内存GC -ed。 ActivityonDestroy()方法不是“终结者”。在开始新的Activity实例时,可以遇到这种情况,即“旧”号仍在内存中(作为reference)。

如果是泄漏,我不希望活动数量下降到零。

如果你看到应用程序的进程中运行它不泄漏为“活动计数下降到零”

在我打了adb dumpsys几次之后,活动计数降为零。这是正常的吗?

是的,由于上述原因。