gpt4 book ai didi

android - 我该怎么做才能避免我的 Android 应用程序发生内存泄漏?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:53 24 4
gpt4 key购买 nike

随着时间的推移,我的 Android 应用占用的内存越来越多。我获取了堆转储并使用 MAT 对其进行了分析。

这是主要的泄漏嫌疑人:

因此,在我退出应用程序(使用后退按钮)之后,似乎我的一个 Activity 没有从内存中清除,然后当我重新启动应用程序时,会创建一个新实例并填充内存。

现在,如果它们是 PhantomReferences,为什么一段时间后或我退出应用程序时内存没有被清除?即使我使用其他应用程序等,内存也永远不会被清除。完全关闭应用程序的唯一方法是使用任务管理器手动终止应用程序。

我该怎么做才能避免这种困惑的内存消耗?

编辑:

我找到问题了!每个 Activity 都使用 Thread.setDefaultUncaughtExceptionHandler() 设置 CustomExceptionHandler,并且 CustomExceptionHandler 保持对上下文的引用。所以我摆脱了上下文引用,并在 onDestroy() 方法中“取消”了 DefaultUncaughtExceptionHandler。现在真的好多了!

最佳答案

我会使用 MAT 的支配树功能来找出这些引用之上的内容,这可能会让您了解哪个 Activity 是罪魁祸首。

确保您没有在任何地方传递 Context 并持有对它的引用,这是典型的 android 内存泄漏,而且很容易做到!

尽管一些静态分析工具对此不以为然,但在 ActivityonDestroy() 方法中,您可以null 所有局部变量(除了原语),它有时有助于插入垃圾收集器,并且可以更轻松地分析 MAT 中的堆转储。

关于android - 我该怎么做才能避免我的 Android 应用程序发生内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11116834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com