我有一个管理新闻源的 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 可能会显示为空。
尝试在 onViewDetachedFromWindow
中删除对 clearAdapter
的调用,看看是否有帮助。
关于Android:在 Adapter (RecyclerView) 中手动清除 Glide 是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39946746/