使用Glide在Recyclerview中的警告

18

我刚开始从Universal Image Loader迁移到Glide。但是,在recyclerview中向下滚动并再次向上滚动时,我会收到大量警告消息。

W/Bitmap: Called reconfigure on a bitmap that is in use! This may cause graphical corruption!

如果我将Glide替换为另一个图片加载库,该警告就会消失。与图片相关的bindViewHolder中的代码:

   Glide.with(viewHolder.imageView.getContext())
            .load(DisplayImageUtil.getImageUrl(item.getImageUrl(), 600))
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(viewHolder.imageView);

在 Nexus 5 上进行测试。


这是在Android M上发生的吗?https://github.com/bumptech/glide/issues/743 - TWiStErRob
@Bendik。当我向上滚动时,图片会重新加载,你有找到任何解决方案吗? - Kartik Shah
5个回答

1
我在安卓 M(Nexus 5x)上第一次运行我的应用后遇到了同样的问题。
编辑:在Glide Github上发布问题https://github.com/bumptech/glide/issues/743后,我发现我的原始“解决方案”并没有解决问题,只是隐藏了消息。警告来自于Android位图,这是因为Glide重复使用位图以获得更好的性能。

请注意,增加RecyclerView中的项目视图计数可能会导致使用比必要更多的内存。 - TWiStErRob
@TWiStErRob - 你是对的。我宁愿编辑答案,以防误导别人走错路。 - JirkaV

0

在加载图片之前尝试调用Glide.clear()。

Glide.clear(viewHolder.imageView);
Glide.with(viewHolder.imageView.getContext())
        .load(DisplayImageUtil.getImageUrl(item.getImageUrl(), 600))
        .diskCacheStrategy(DiskCacheStrategy.ALL)
        .into(viewHolder.imageView);

希望这可以帮到你。


4
我加入了 Glide.clear(),但问题并没有消除 :( - Andrii Kovalchuk

0

您可以使用Android Studio上的Logcat Filters清理日志。

在Android Logcat过滤器的正则表达式中添加^(?!AbsListView|IInputConnectionWrapper|ApplicationPackageManager|Bitmap|ViewRootImpl)


0

这个问题在这里有讨论。

通常会出现这种情况是因为误用位图(Bitmap),或者在没有中间过程的情况下多次将位图返回到池中,或者在对应目标(Target)调用clear()后仍然引用该位图。如果您有自定义转换,请仔细检查以确保不会将位图两次返回到池中。您可以在维基上了解更多关于此问题的信息: https://github.com/bumptech/glide/wiki/Resource-re-use-in-Glide

你看到的日志来自catch块(捕获异常)。请确保:

  • 不要尝试在一个目标视图中加载两个位图
  • 清除资源以重用目标视图,但仍持有资源的引用

由于您正在使用RecyclerView,可能第二点是正确的,即在持有所有位图引用的同时回收视图。


1
我不确定我完全理解这个问题。我没有进行任何自定义回收,我只是在RecyclerView的bindViewHolder中加载图像。当我向上滚动时,问题就出现了,图像会再次加载。这是我必须用Glide手动处理的吗?之前只使用过UIL,并没有遇到这样的问题。 - Bendik
@Kay,你指的是哪个“catch块”?我发现这是来自本地Bitmap.cpp的一个警告。 - TWiStErRob
3
这个答案不正确,引用中提到的是IllegalArgumentException而不是这里的警告。原问题中的警告会在Glide的正常使用过程中发生,并不是误用位图的结果。 - Sam Judd

0

我出现了警告和图形损坏的情况。这表现为截断的位图出现在回收站视图的顶部和底部,并在快速滚动时停留在那里。

将图像视图放置在框架布局中已经消除了图像损坏。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接