gpt4 book ai didi

android - Leakcanary、Recyclerview 泄漏适配器

转载 作者:IT老高 更新时间:2023-10-28 22:16:49 27 4
gpt4 key购买 nike

我决定是时候学习如何使用 Leak Canary 来检测我的应用程序中的泄漏了,并且像往常一样,我尝试在我的项目中实现它以真正了解如何使用该工具。实现它很容易,困难的部分是阅读该工具向我抛出的内容。我有一个 ScrollView ,当我上下滚动时,它似乎在内存管理器中积累了内存(即使它没有加载任何新数据),所以我认为这是一个很好的候选对象来跟踪泄漏,结果如下:

enter image description here

看起来 v7.widget.RecyclerView 正在泄漏适配器,而不是我的应用程序。但这不可能是对的……对吧?

这是适配器和使用它的类的代码: https://gist.github.com/feresr/a53c7b68145d6414c40ec70b3b842f1e

我开始为这个问题悬赏,因为它在两年后重新出现在一个完全不同的应用程序上

最佳答案

如果适配器的生命周期比 RecyclerView 长,你必须在 onDestroyView 中清除适配器引用:

@Override
public void onDestroyView() {
recyclerView.setAdapter(null);
super.onDestroyView();
}

否则适配器将持有对应该已经耗尽内存的 RecyclerView 的引用。

androidx.fragment:fragment:1.3.0: 之前的特别说明:

如果屏幕涉及到过渡动画,你实际上必须更进一步,只有在 View 变得分离时才清除适配器:

@Override
public void onDestroyView() {
recyclerView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
// no-op
}

@Override
public void onViewDetachedFromWindow(View v) {
recyclerView.setAdapter(null);
}
});
super.onDestroyView();
}

对于 androidx.fragment:fragment:1.3.0 及更高版本,onDestroyView 发生在 View 分离之后,并且此额外代码不会需要更长的时间。

关于android - Leakcanary、Recyclerview 泄漏适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35520946/

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