gpt4 book ai didi

android GoogleMaps 内存泄漏(?)

转载 作者:行者123 更新时间:2023-11-29 13:59:24 25 4
gpt4 key购买 nike

我正在处理一个处理 map Activity 的项目。我正在运行一个由单个 Activity MaptestActivity 组成的测试应用程序,它扩展了 MapActivity 并且什么都不做。我将设备旋转了十多次,并使用 MAT 分析了堆转储。我注意到存在两个主要 Activity 的实例(泄漏?)。我用仅扩展 Activity 的相同 Activity 重新测试了该应用程序:转储显示系统仅保留一个实例,即当前实例。我附上了这两种情况的屏幕截图。我不太喜欢 MAT,也许我只是误解了结果,但一切正常。你能解释一下吗?

With memory leak

Without memory leak

最佳答案

如果旋转设备后内存中仍有两个 Activity ,则说明存在内存泄漏。您可以使用 MAT 通过使用直方图来查看阻止该 Activity 被垃圾收集的原因。搜索类名以找到它。然后右键单击它并选择 list objects/with incoming references。这将列出该对象在内存中的每次出现。右键单击其中一个对象并选择 Path to GC roots/exclude weak references。现在您应该能够看到对象的层次结构,在 Activity 的 onDestroy 完成后,其中的某些内容没有被完全清除。诸如对静态上下文的硬引用之类的事情会导致这种情况。为了解决我们的一些内存问题,我们不得不做一些事情,比如在适当的地方使用 weakReferences,并在 onDestroy 中清理一些东西(比如将监听器设置为 null)。

通常情况下,如果您的 Activity 没有占用像位图这样的大对象,您可以“摆脱”内存泄漏,因为这意味着在您超过设备的应用程序堆大小之前会使用大量应用程序。但是,如果说您的所有 Activity 都保存在一个大位图上,那么泄漏 Activity 就变得更重要了。

这是一个很好的视频:Memory Management for Android Apps还有一篇好文章:Avoiding Memory Leaks

关于android GoogleMaps 内存泄漏(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10245042/

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