在Recyclerview中使用Glide警告

问题描述 投票:16回答:5

我刚开始从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 android-glide
5个回答
1
投票

在Android M(Nexus 5x)上首次运行我的应用后,我遇到了同样的问题。

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


0
投票

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

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

希望这有帮助。


0
投票

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

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


0
投票

您可以使用Android Studio上的Logcat过滤器清理日志。

在Android Logcat过滤器的Regex中添加^(?!AbsListView|IInputConnectionWrapper|ApplicationPackageManager|Bitmap|ViewRootImpl)


0
投票

这是讨论here

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.