我很难找到可能的内存泄漏。 我有一个活动,在背景中做了一些繁重的工作。
完成某些任务后,该应用程序会消耗太多内存。它似乎没有得到适当的清理。
这是处于默认状态的活动:
如果我运行Activity正在执行的任务,则会分配越来越多的内存。
起初我认为这必须是内存问题,因为GC无法正常释放内存。据我所知,如果没有对象的参考,GC可以释放内存。这是对的吗?
现在出现让我困惑的部分:
如果我从Android Studio运行GC,则会正确清理内存并且我的活动永远不会关闭。我只需要在分配大量内存时使用Android Studio GC。
这是我的意思:
一般来说问题是:
为什么Android Studio GC可以正确清理内存,为什么它不能与自动android GC一起正常工作?
我知道这是一个很普遍的问题。我只是想知道,如果有不同类型的垃圾收集或类似的东西。
同时调用System.gc();
不会正确清理内存。
其他信息:
Moto G 2nd gen
Android 5.0.2。
答案 0 :(得分:4)
由于多种原因,可能会发生内存泄漏。一个常见原因是位图无法正确回收。内存泄漏的其他种子是将上下文保留在对象中。例如,您启动异步任务并传递上下文,因为稍后您需要它。当异步任务正在运行时,它会保留对上下文的引用,因此整个活动都在内存中。这也是非常频繁的匿名和内部类,它们引用了通常是片段或活动的父类。
我建议您使用库泄漏金丝雀来发现内存泄漏,并使用Android工具跟踪分配,以便准确发现内存泄漏的位置。
答案 1 :(得分:2)
也许您可以尝试在繁重的处理代码中定期明确地调用System.gc();
?