Android:在Adapter(RecyclerView)中手动清除Glide是一种好的做法吗?

Android:在Adapter(RecyclerView)中手动清除Glide是一种好的做法吗?,android,android-recyclerview,adapter,android-glide,Android,Android Recyclerview,Adapter,Android Glide,我有一个管理新闻提要的Recyclerview。有很多图像。有了Android monitor,当我在这个列表中滚动时,分配的内存总是在增加!因此,我添加了以下两种覆盖方法(在我的适配器中): 内存分配的结果更好(但不是完美的!)。现在我有了一个新问题,因为有时一些图片没有加载到我的新闻提要中(这是完全随机的!) 谢谢你们的帮助,伙计们 在onViewRecycled中调用clear应该可以。如果您在回收的视图池中有许多视图(您几乎总是这样做),它可以节省内存并改进位图重用 但是,在onview

我有一个管理新闻提要的Recyclerview。有很多图像。有了Android monitor,当我在这个列表中滚动时,分配的内存总是在增加!因此,我添加了以下两种覆盖方法(在我的适配器中):

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


谢谢你们的帮助,伙计们

onViewRecycled
中调用clear应该可以。如果您在回收的视图池中有许多视图(您几乎总是这样做),它可以节省内存并改进位图重用

但是,在
onviewsdetachedFromWindow
中调用clear可能并不合适。可以分离视图,然后在不重新绑定的情况下重新附着。如果发生这种情况,视图可能会显示为空


尝试删除对
onViewDetachedFromWindow
中的
clearAdapter
的调用,看看这是否有帮助。

我同意,在
onViewDetachedFromWindow
中清除视图是不安全的,因为如果支架尚未回收,可能无法重新绑定。
@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);
    ...
}