我有一个管理新闻源的 Recyclerview。有很多图像。使用 Android 监视器,当我在此列表中滚动时,分配的内存总是增加!所以我添加了这两个覆盖方法(在我的适配器中):
@Override
public void onViewDetachedFromWindow(RecyclerView.ViewHolder holder) {
super.onViewDetachedFromWindow(holder);
clearAdapter(holder);
}
@Override
public void onViewRecycled(RecyclerView.ViewHolder holder) {
super.onViewRecycled(holder);
clearAdapter(holder);
}
protected void clearAdapter(RecyclerView.ViewHolder holder) {
Glide.clear(holder.mImageView);
...
}
分配内存的结果更好(但并不完美!)。现在我有一个新问题,因为有时我的新闻源中没有加载一些图像(这完全是随机的!)
谢谢你们的帮助!
最佳答案
在 onViewRecycled
中调用 clear 应该没问题。如果您在回收 View 池中有多个 View (您几乎总是这样做),它可以节省内存并改善位图重用。
但是,在 onViewDetachedFromWindow
中调用 clear 可能不好。一个 View 可能会被分离,然后重新附加而不被重新绑定(bind)。如果发生这种情况, View 可能会显示为空。
尝试在 clearAdapter
中删除对 onViewDetachedFromWindow
的调用,看看是否有帮助。
关于Android:在 Adapter (RecyclerView) 中手动清除 Glide 是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39946746/