在Recyclerview中使用Glide警告

我刚开始从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(Nexus 5x)上首次运行我的应用后,我遇到了同样的问题。

编辑:在Glide Github上打开问题后 – https://github.com/bumptech/glide/issues/743 ,我发现我的orignal“解决方案”没有解决问题,只隐藏了消息。 警告来自Android Bitmap,这是因为Glide重用了Bitmap以获得更好的性能。

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

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

希望这有帮助。

我收到了警告和图形损坏。 这是在回收器视图的顶部和底部出现的剪切位图的forms,并且如果滚动太快则停留在那里。

将图像视图放在框架布局中已经摆脱了图形损坏。

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

在Android Logcatfilter的Regex中添加^(?!AbsListView|IInputConnectionWrapper|ApplicationPackageManager|Bitmap|ViewRootImpl)

这在这里讨论,

通常这是误用Bitmaps的结果,通过在没有中间get的情况下多次将Bitmap返回到池中,或者在相应的Target上调用clear()之后引用Bitmap。 如果您有自定义转换,那么这是一个仔细查看的好地方,以确保您没有将Bitmap返回到池中两次。 您可以在wiki上查看有关此问题的更多信息: https : //github.com/bumptech/glide/wiki/Resource-re-use-in-Glide 。

您看到的日志来自catch块(捕获的exception)。 确保你是:

  • 不尝试在一个目标视图中加载2位图
  • 不清除资源以重用目标视图,但保留资源的引用

既然你正在使用recyclerView,可能第二点是真的,即在保持所有位图引用的同时回收视图