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

标签 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);
    ...
}

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

谢谢大家的帮助!

最佳答案

onViewRecycled 中调用 clear 应该没问题。如果您在回收 View 池中有多个 View (您几乎总是这样做),它可以节省内存并提高位图的重用。

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

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

关于Android:在 Adapter (RecyclerView) 中手动清除 Glide 是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39946746/

相关文章:

android - 如何使用 Glide 转换从 Gallery 或 sdcard 加载到 ImageView 上的图像?

android - 如何在 asynctask android 中恢复下载

android - RecyclerView 中的缩放中心项目

java - 如何在另一个 recyclerView 中添加一个 recyclerView

android - 防止 RecyclerView 消费触摸事件

java - 当我删除某些内容时,ListView 不会刷新

java - Google 日历 Android API 错误 : null

android - 这么多移动设备

android - 具有多个布局的 ListView 在滚动时崩溃

windows - OpenVPN 连接失败/此系统上的所有 TAP-Win32 适配器当前正在使用中