我有一个管理新闻源的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);
...
}
结果更好地分配了内存(但并不完美!)。现在我有一个新问题,因为有时一些图像没有加载到我的新闻源中(它完全是随机的!)
感谢您的帮助!
答案 0 :(得分:6)
在onViewRecycled
中调用clear应该没问题。如果在循环视图池中有许多视图(您几乎总是这样做),它可以节省内存并改善Bitmap重用。
但是,在onViewDetachedFromWindow
中调用clear可能不太好。视图可能会被分离,然后重新附加而不会被重新绑定。如果发生这种情况,视图可能显示为空。
尝试删除clearAdapter
中onViewDetachedFromWindow
的来电,看看是否有帮助。