【发布时间】:2016-06-01 22:47:12
【问题描述】:
我决定是时候学习如何使用 Leak Canary 来检测我的应用程序中的泄漏了,并且像往常一样,我尝试在我的项目中实施它以真正了解如何使用该工具。实现它很容易,困难的部分是阅读该工具向我抛出的内容。 我有一个滚动视图,当我上下滚动时,它似乎在内存管理器中累积内存(即使它没有加载任何新数据),所以我认为这是一个很好的候选对象来跟踪泄漏,结果如下:
看起来 v7.widget.RecyclerView 正在泄漏适配器,而不是我的应用程序。但这不可能是对的……对吧?
这是适配器和使用它的类的代码: https://gist.github.com/feresr/a53c7b68145d6414c40ec70b3b842f1e
我开始为这个问题悬赏,因为它在两年后在一个完全不同的应用程序上重新出现
【问题讨论】:
-
看起来您正在传递应用程序上下文,而您可能应该使用 RecyclerView 的上下文或您的活动上下文。应用程序上下文是长期存在的,这会阻止收集。
-
GapWorker 是执行预取的静态类。当 RecyclerView 被销毁时,它会在 onDetachedFromWindow() 中正确地从 GapWorker 中注销自己。您是否在自定义 RecyclerView 中覆盖了 onDetachedFromWindow() 并忘记调用 super.onDetachedFromWindow() ?
标签: android memory-leaks leakcanary