解决-Glide preload()的一个坑

Glide预加载图片preload失效问题修复! 我在preload的时候,没有传入宽高,默认按原图取,走的api是不带分辨率path 的。而当使用的地方传入了imageView,它会根据imageView的宽高,请求对应分辨率的API,导致转换后的key变了,相当于我请求的虽然是同一个地址,但是转换成了两个。结果发现,并没有想象中的预加载效果,它貌似还是走的网络加载。为了提高用户体验,想要先下载图片,然后下载完成之后,再对图片进行展示,这样用户就不必看到加载图片时的空白状态。最终发现,是因为生成的key不一样,怎么会不一样呢,我明明获取的是同一张图片! 阅读详情

通常为了让图片能够更快地加载出来,会给图片做预加载。Glide里预加载的函数为preload()。

  • 使用姿势:Glide.with(context).load(url).preload()

  • 奇怪的现象:如果还有一个地方也在使用预加载,比如我有一个Activity的background需要预加载,为了达到加载完成后将background显示出来的目的,需要这样使用:

Glide.with(context)
.load(url)
.listener(new RequestListener<Drawable>() {
    @Override
    public boolean onLoadFailed(@Nullable GlideException e, Object model,  Target<Drawable> target, boolean isFirstResource) {
   return false;
    }

    @Override
    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
     backgroundView.setBackground(resource);
  return false;
    }})
.preload();

同时,这个Activity中还有一个Gridview也需要预加载图片,则会出现Activity的background跟随Gridview的滑动而变化的奇怪现象。

  • 产生原因
    这个backgroundView是一个自定义的View,在排除布局中其它元素的影响以及backgroundView自己调用setBackground()等一系列改变背景的方法之后,唯一的可能性就是Glide底层对这个View的bitmap进行了重绘。

通过查看Glide设计,发现确实存在这种可能。因为Glide preload一个对象时,这个drawable并没有和哪个View绑定,该bitmap资源是放入BitmapPool中的。BitmapPool中的对象是可以复用的,因此如果另一张图片被解析成了Bitmap,而此Bitmap正好用了刚才那张图片的控件来存放解析后的数据,这样就会出现backgroundView的图片变成新的图片。

  • 解决办法
    使用Glide的preload预加载图片,然后设置背景drawable这种方式是行不通的。可以让backgroundView继承ImageView。直接使用Glide.with(context).load(url).into(imageview)加载该背景图片。
Glide图片加载优化全攻略:从缓存到性能调优 如果需要调整 Glide 的线程池大小,可以通过自定义。 阅读详情

相关推荐

华为交换机密码策略配置避坑指南:明文/密文、长度、复杂度,一个命令就出错

本文详细解析华为交换机密码策略配置的关键要点,包括密码长度、复杂度及等保合规要求。通过实战案例揭示常见配置误区,如明文/密文密码格式差异、复杂度检查联动机制等,帮助网络工程师避免安全漏洞。特别针对等保二级和三级要求,提供可直接落地的安全加固方案。

weixin_30879169的博客 368

慎用Glide preload

Glide preload 机制 先看看源码 public Target<TranscodeType> preload(int width, int height) { final PreloadTarget<TranscodeType> target = PreloadTarget.obtain(width, height); return into(target); } //进入preloadTarget 源码 p

专注Android ,直到世界尽头 2623

2021.11.23 Covins 多机器人单目协同建图 跑Euroc数据集 更新

近日,一直在调试如何使用Covins跑通数据集,因为是初学者,所以很多bug出来的时候原理都不懂,只能复制——百度——尝试解决的过程。 现分享一下近日的结果以及与Covins作者帮助解答的一些问题。 使用代码行跑依次跑Euroc多数据集 这里的意思是使用作者提供的covins_examples文件夹中的euroc_examples_mh123_vigba.sh文件,这个文件是将三个Euroc数据集依次运行,跑完第一个数据集,第二个数据集运行的时候在第一个数据集生成地图的基础上继续绘制,由于我只下载了两个数据

qq_42614598的博客 2475

探索 Glide 原理

前言 1. Glide 基本用法 接下来的讲解将基于 Glide 目前的最新版本 4.11。 Glide 的使用特别简单,首先添加依赖。 然后调用下面这三个方法。 with() 可以传 Applicaiton、Activity 、Fragment 与 view 等类型的参数,加载图片的请求会与该参数的生命周期绑定在一起。 load() 可以传图片的网络地址、Drawable 等。 into() 一般传 ImageView 。 2. 内容概览 Glide 加载图片大致可分为三个步骤。 .

gzsuperwin的博客 2157

Proteus仿真实战:ADC0832时序解析与51单片机精准电压采集

本文详细解析了ADC0832模数转换芯片在Proteus仿真环境中的时序控制与51单片机驱动实现。通过实战代码示例和精度优化技巧,帮助开发者掌握电压采集的关键技术,包括时序配置、数据校验和噪声抑制等核心要点,提升嵌入式系统设计的精准度与可靠性。

weixin_29172963的博客 873

Vmware虚拟机一打开就蓝屏解决方法

Vmware虚拟机一打开就蓝屏解决方法 问题: 一打开Vmware虚拟机就蓝屏,如下图所示: 解决方法1: 启用和关闭windows功能(对话框)——>虚拟机平台(选项打对勾,默认没勾选)——>确定后重启——>再进应该就好了。 解决方法2: ①.查看电脑中的Hyper-V服务是否关闭 1.打开控制面板-程序-程序和功能 2.双击启用或关闭Windows功能 3.把Hyper-V前面的勾去掉 如果后期发下没有反应,或者电脑本身Hyper-V的服务没有打开,可以先打开在关闭,试

m0_55901666的博客 26万+

关于glide预加载preload方法的注意事项

问题描述 项目需要实现一些图片的预加载,由于图片加载框架使用的是glide,所以很自然的使用了glide的预加载的方法:preload。在使用了之后发现并没有什么卵用,然后翻看了各种文章最后,终于得到了答案并解决了该问题。详情请见 [ 跳转链接 ] 总结 这篇文章讲述了问题的点在于diskCacheStrategy的配置,要将preload时的磁盘缓存跟加载图片时的磁盘缓存方式保持一致,...

wove55678的博客 1万+

低功耗蓝牙技术 > GAP和GATT介绍

GAP和GATT作为蓝牙协议栈中的关键协议,为BLE设备之间的通信提供了标准和框架。GAP主要负责设备的连接、广播和角色定义,而GATT则定义了BLE设备之间的具体通信方式,通过Services和Characteristics实现数据的传输和交换。在蓝牙技术的发展中,GAP和GATT两个协议扮演着关键的角色,为BLE(低功耗蓝牙)设备之间的通信提供了规范和框架。GATT连接是建立在GAP协议之上的,是一种独占连接,一个BLE外设同时只能连接一个中心设备。连接建立后,通信是双向的,不同于GAP的单向通信。

DL_62532的专栏 4031

Android Glide预加载preload ,kotlin

【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。《Android图片加载与缓存开源框架:Android Glide》Android Glide是一个开源的图片加载和缓存处理的第三方框架。

Zhang Phil 1867

BAT031:按列表名单将路径a下的文件夹批量剪切到路径b

摘要:按列表名单将路径a下的文件夹批量剪切到路径b。

qq_31762031的博客 1220

下采样新突破!ADown模块让YOLOv11多尺度特征提取更精准

ADown 凭借可编程梯度信息与多分支特征聚合的创新设计,打破了传统下采样在特征保留上的固有局限。本教程从原理到代码实现,再到工业场景适配,完整呈现了其在 YOLOv11 中的集成路径。只需简单新增模块脚本并修改配置文件,你的目标检测模型就能在多尺度特征捕捉能力上实现跨越式提升——无论是学术研究中的小目标检测突破,还是工业场景下的复杂多尺度任务落地,ADown 都能成为你攻克下采样瓶颈的利器。现在就动手尝试,让你的检测模型在下一代下采样技术的创新中再上一个台阶吧。

know_F0727的博客 524

Glide源码解析(四)玩转Glide的回调与监听

转载自 guolin,略有删减改动 Glide源码解析(四)玩转Glide的回调与监听回调的源码实现into()方法SimpleTargetViewTargetpreload()方法downloadOnly()方法listener()方法 大家好,今天我们继续学习Glide。在上一篇文章当中,我带着大家一起深入探究了Glide的缓存机制,我们不光掌握了Glide缓存的使用方法,还通过源码分析对缓存的工作原理进行了了解。虽说上篇文章和本篇文章的内容关系并不是很大,不过感兴趣的朋友还是可以去阅读一下 Glide

aha_jasper的博客 1403

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android图片加载框架:玩转Glide的回调与监听

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

hnsgsdsagaaq的博客 1382

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android Glide 升级4.8 后, 原方法error/preload/fallback 无法使用

--------------------------------------------------------------------------------------------------------------------------------------------------------------- 转载声明:本文来自 https://blog.youkuaiyun.com/shijian...

shijianduan1的博客 9231

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Glide 获取磁盘缓存、预加载 preload()、downloadOnly()和白屏问题

Glide 获取磁盘缓存、预加载 preload()、downloadOnly()和白屏问题 preload()和downloadOnly() 使用方式参考链接https://blog.youkuaiyun.com/laizhixue/a[https://blog.youkuaiyun.com/laizhixue/article/details/79296304] 需求是需要提前缓存开屏广告图片,等到下一次打开app时根...

chichaochou的博客 9334

Glide源码学习九:带你全面了解Glide 4的用法

系列文章:=====相关文章:=====其实在写这个系列第一篇文章的时候,Glide就推出4.0.0的RC版了。那个时候因为我一直研究的都是Glide 3.7.0版本,再加上RC版本还不太稳定,因此整个系列也都是基于3.7.0版本来写的。而现在,Glide的最新版本已经出到了4.4.0,可以说Glide 4已经是相当成熟和稳定了。

2401_89285717的博客 900

Glide-回调与监听(四)

Glide-回调与监听(四)

Errol's Blog 5549

Glide preload和into的区别

一、背景 贝壳2.6.0版本使用Glide preload方法替换了部分显示图片的方式, 在灰度期间发现控件显示了错误的图片或者崩溃问题。 Fatal Exception: java.lang.RuntimeException:Canvas: trying to use a recycled bitmap android.graphics.Bitmap@25e89bf at android...

brycegao321的博客 1374

Glide用法总结--缓存与下载方法

本文转自laizhixue博主,原文排版上有些问题,我在此加以修改。 Glide加载图片虽说非常智能,它会自动判断该图片是否已经有缓存了,如果有的话就直接从缓存中读取,没有的话再从网络去下载。但是如果我希望提前对图片进行一个预加载,等真正需要加载图片的时候就直接从缓存中读取,不想再等待慢长的网络加载时间了,这该怎么办呢? preload()方法有两个方法重载,一个不带参数,表示将会加载图片的原...

一行两行的世界. 1536

带你玩转Glide的回调与监听

大家早上好,今天我们继续学习Glide。 在上一篇文章当中,我带着大家一起深入探究了Glide的缓存机制,我们不光掌握了Glide缓存的使用方法,还通过源码分析对缓存的工作原理进行了了解。虽说上篇文章和本篇文章的内容关系并不是很大,不过感兴趣的朋友还是可以去阅读一下 深入探究Glide的缓存机制 。 今天我们就先从缓存这一块内容开始入手吧。不过今天文章中的源码都建在上一篇源码分析的基础之上,还

郭霖 823

Glide实现图片预加载,提前缓存

当下很多App都有开屏广告,App打开的同时广告图片立马就显示出来了,可能有些人就有疑问了”这些广告图片是在应用打包的时候一起打包进去的吗?不然要是通过网络现加载的话怎么可能这么快,现在5G又没普及,而且在没网或者网络不好的情况下也没有影响到这些广告图片的展示,那不是提前打包好的还是什么?”。 针对上面的疑问,答案只有一个,那就是“预加载”,提前将广告资源缓存到本地,在需要的时候直接从本地读取加...

Ever69的博客 1万+
上一篇: 解决-Cannot resolve symbol "GlideApp"
下一篇: 解决-Glide加载CircleImageView失败
Huang-Lin
博客等级 码龄10年 20粉丝 58原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值