我刚开始从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);
希望这有帮助。
我收到了警告和图形损坏。这是在回收器视图的顶部和底部出现的剪切位图的形式,如果滚动得太快则停留在那里。
将图像视图放在框架布局中已经摆脱了图形损坏。
您可以使用Android Studio上的Logcat过滤器清理日志。
在Android Logcat过滤器的Regex中添加^(?!AbsListView|IInputConnectionWrapper|ApplicationPackageManager|Bitmap|ViewRootImpl)
。
这是讨论here,
通常这是误用Bitmaps的结果,可能是在没有中间get的情况下多次将Bitmap返回到池中,或者在相应的Target上调用clear()之后引用Bitmap。如果您有自定义转换,那么这是一个仔细查看的好地方,以确保您没有将Bitmap返回到池中两次。您可以在wiki上查看有关此问题的更多信息:https://github.com/bumptech/glide/wiki/Resource-re-use-in-Glide。
您看到的日志来自catch块(捕获的异常)。确保你是:
既然你正在使用recyclerView,可能第二点是正确的,即在保持所有位图引用的同时回收视图