我有一个管理新闻源的 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/

10-11 10:50