Android 我的应用程序是否存在内存泄漏?

Android Does my app have a memory leak?

我在 android studio 中查看内存使用情况,发现每次启动我的应用程序时,内存都会增加几 MB。我从未从我支持的任何设备收到 OutOfMemory 异常崩溃报告。我不熟悉 android SDK 中包含的很多工具,所以我不确定这是否表示内存泄漏。

在 android 工作室内存监视器中,这是 3 次启动后的图形:

如您所见,每次启动时内存都会增加几 MB。

这是否意味着我有内存泄漏? 如果是这样,我可以采取哪些步骤来查找内存泄漏的根源?

要确保您的应用没有内存泄漏,您需要做两件事:

  1. 进行堆转储。
  2. 用一些内存分析器分析它。

official documentation中描述了获取堆转储的方法。
一旦你有了你的转储,你可以将它加载到内存分析器工具中(我更喜欢 YourKit,但你可以选择任何你喜欢的分析器)并查找泄漏的对象(可以在所选内存分析器的文档)。

简单 YourKit 工作流程:启动分析器,通过 Ctrl + O 打开堆转储。您会看到类似于下面所附的屏幕:

单击左侧的Inspections按钮,然后单击Alt + A(或Run All按钮).您感兴趣的检查 Objects retained by inner class back references 包含在 Possible leaks 组中。我这里只有String个对象,也算正常。任何时候你在这里看到一些你自己的 类,你就有内存泄漏。您可以单击您的对象(如果您在此处列出了它们)以查看它有哪些引用以及引用它的人以了解泄漏源是什么。