我正在开发的 Android 应用程序中有一个奇怪的内存行为。该应用程序运行良好,但如果我查看 Android 中的“任务管理器”,如三星 SII 任务管理器或 Nexus 7 上的“内存使用”应用程序,它表明在使用该应用程序时,使用的内存量很快增长到疯狂的数量,例如数百兆(在 Nexus 7 上为 600~700MB)。然后它可以回落到大约 200MB,再次增长等等。
起初我认为我的内存泄漏很严重,并开始在 Eclipse 内存分析器 (MAT) 中搜索问题,就像在这个优秀的视频中解释的那样。但问题是,从这里看起来一切正常。我没有发现任何重复的活动实例或任何其他可能导致泄漏的东西,并且报告的内存使用量要小得多。该问题也不会出现在 GC 消息中。所以我可以在任务管理器中报告 600MB 的使用情况,在 Logcat 中是这样的:
01-29 12:05:44.511: D/dalvikvm(6044): GC_FOR_ALLOC freed 3930K, 24% free 28959K/38096K, paused 17ms, total 17ms
堆数量永远不会超过 50~60MB(这可能是正常的,因为应用程序中有很多图片)。MAT 中的数字匹配。
我想确定我的应用程序中是否存在内存泄漏。即使 GC 消息和 MAT 没有报告问题,我发现任务管理器报告如此高的内存使用率真的很奇怪。也许这里有人已经遇到过这种奇怪的行为,可以给我一个关于正在发生的事情的线索?