Android:在Adapter(RecyclerView)中手动清除Glide是一个好习惯吗?

时间:2016-10-09 17:58:06

标签: android android-recyclerview adapter android-glide

我有一个管理新闻源的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);
    ...
}

结果更好地分配了内存(但并不完美!)。现在我有一个新问题,因为有时一些图像没有加载到我的新闻源中(它完全是随机的!)

感谢您的帮助!

1 个答案:

答案 0 :(得分:6)

onViewRecycled中调用clear应该没问题。如果在循环视图池中有许多视图(您几乎总是这样做),它可以节省内存并改善Bitmap重用。

但是,在onViewDetachedFromWindow中调用clear可能不太好。视图可能会被分离,然后重新附加而不会被重新绑定。如果发生这种情况,视图可能显示为空。

尝试删除clearAdapteronViewDetachedFromWindow的来电,看看是否有帮助。