Glide遇到重定向url产生的bug分析以及解决
issues地址
不知道是不是同一个问题,不过也是跟重定向相关的。
文章末尾有解决方法的代码!!!
问题描述:
正常情况:www.prohub.com/a.png -> a图
glide缓存:www.prohub.com/a.png <==> a图重定向情况:www.prohub.com/a.png -> www.fbiwarning.com/403.png -> 403图
glide缓存:www.prohub.com/a.png <==> 403图
假设www.prohub.com/a.png恢复了正常不会重定向了,由于glide缓存,glide直接加载了403图,导致bug产生
源码分析:网络加载图片 -> disk cache过程
1、SourceGenerator#startNext(轮询执行所有LoadData)-> SourceGenerator#startNextLoad(执行单个LoadData)-> LoadData#fetcher#loadData(执行具体任务,以网络加载图片为例)-> DataCallback#onLoadFailed(下载失败)-> DataCallback#onDataReady(下载完成)-> 缓存数据到 dataToCache 属性
2、当下一次执行 SourceGenerator#startNext 的时候,如果 dataToCache 属性不为空,执行 SourceGenerator#cacheData2.1、生成缓存目标的key(它也是缓存图片的文件名 文件名是:key + .o)创建DataCacheKey(loadData.sourceKey, helper.getSignature())loadData.sourceKey:执行下载任务时候的GlideUrlhelper.getSignature:开发者配置的签名(这里忽略它)2.2、key是根据url来生成的url -> SHA-256 -> sha256BytesToHex2.3、执行齿盘缓存(DiskLruCache)helper.getDiskCache().put(originalKey, writer); -> DiskLruCacheWrapper#put ...2.4、缓存路径在 /data/data/pkg/cache/image_manager_disk_cache
解决方法:
直接去Glide源码改,改它喵的(比较粗暴,入侵性强),我们需要另辟蹊径方法1、感知重定向,将重定向后的url更新给Glide,让Glide用重定向后的url进行缓存。
该方法适合app内 大量 网络资源链接都存在重定向的情况。方法2、感知重定向,如果发生重定向将本次加载视为失败,并且将重定向url抛出,使用新url再次进行加载。
该方法适合app内 少量 网络资源链接都存在重定向的情况。不管是那种方法,都需要用到Glide4提供的自定义组件将网络组件替换成Okhttp,通过Okhttp我们好感知是否产生了重定向。
FixGlideRetargetUrlBug代码对两种方法都进行了实现,给大家一个参考
Glide遇到重定向url产生的bug分析以及解决相关推荐
- Sentry UDFWhiteList bug分析
Sentry UDFWhiteList bug分析 1 简介 此手册应用于row_number.unbase64.windowingtablefunction在开启sentry后不能执行的bug分析. ...
- 【转】PHP获取重定向URL的几种方法
有时候我们会在开发中,经常会遇到有URL 301或 302重定向的情况,这时候我们可能需要获取重定向之后的url,下面我们介绍一下几种获取重定向url的方法: 1.用get_headers函数 php ...
- PHP获取重定向URL的几种方法
有时候我们会在开发中,经常会遇到有URL 301或 302重定向的情况,这时候我们可能需要获取重定向之后的url,下面我们介绍一下几种获取重定向url的方法: 1.用get_headers函数 php ...
- java redirect 跨域_如何解决跨域重定向携带参数的问题?不使用将参数拼接在重定向url末尾的方式...
如何解决跨域重定向携带参数的问题?不使用将参数拼接在重定向url末尾的方式 需求,项目A在服务器A上,需要重定向到服务器B上项目B,并且需要携带参数,参数对用户不可见,所以不可以将参数拼接在重定向ur ...
- java重定向url有参数吗_JavaScript重定向URL参数的两种方法小结
这篇文章主要介绍的是JavaScript重定向URL参数的两种方法,下面话不多说,直接看示例代码. 一.字符拼接形式 function setUri(para, val) { var strNewUr ...
- vue页面渲染(请求返回的后端)data,文本换行与显示bug 的分析与解决提示
vue页面渲染(请求返回的后端)data,文本换行与显示bug 的分析与解决提示 问题说明: vue项目,后台一经修改文案[介绍内容]后,前端接收显示实时数据,却无法换行? 原因分析: 后台页面的表单 ...
- phpcmsV9导航栏目点击跳转始终是localhost首页 bug - 分析篇
文章目录 发现点哪个栏目却都跳到了localhost首页! 一开始,我以为?是因为在后台给栏目添加设置了show模板? 后来发现,并不是我想的那样.在后台多更新了几次各种缓存,浏览器多Ctrl+F5刷 ...
- easyUi reload 重定向URL
今天在做工资流程操作的时候,需要根据下拉 展示不同的 流程信息. 使用 easyUi 的 $("dg").datagrid('reload'); 只是重载当前的URL, 无法根据类 ...
- 最近一个快要结束的项目的BUG分析
"当Bug跟踪系统上所有的bug都被打上Closed后,你是否感到如释重负.当项目成功交付后你是否感到大脑进入了"冬眠"期,上网,聊天,写自己感兴趣的小程序,但是对于上个 ...
- 机器学习在基于 URL 的客户端监控分析中的优化和实践
本文首发于"Shopee技术团队" 摘要 传统的客户端监控分析场景中,采用按照具体的 URL 进行统计分析的方法,在面对一个应用可能会访问成千上万条 URL 时,结果就差强人意,不 ...
最新文章
- 简单XML文件C#操作方法
- 基于Android的浮动组件,可以用于应用中的新功能展示等等。
- Qt for ios 设置程序显示名称
- ThreadLocal知识点详解
- mysql数据库加载太慢_使用MySQL数据库很慢
- java热门编程题_java经典50编程题(1-10)
- matlab7.0 win10安装报错,win10系统安装Matlab7.0后出现Runtime Error警告窗口的技巧介绍...
- 更好的图片压缩途径: WebP探索之路
- 计算机管理系统权限申请审批表,开通权限申请书范文
- OpenGL学习笔记:GLAD和第一个窗口
- postfix反垃圾邮件说明
- 鸿蒙os下载到电脑上,华为鸿蒙os系统官网
- 移动端框架之mand-mobile
- HTML基础--标签VSCode常用快捷方式和插件
- 解开神经科学中的交叉频率耦合
- 文件类型关联的文件图标
- 国际短信系统平台发送接口说明方法|网页短信平台开发搭建-移讯云短信系统
- Excel插入图片(C#)
- vue部署至Tomcat,F5刷新报404问题解决
- 华为手机老是android自动升级,安卓手机系统升级!华为手机系统更新设置
热门文章
- ArcGIS For Unity3D(一)—— 在Unity3D中开启ArcGIS
- java workbook.close_找不到符号Workbook.close()
- CSS 分析倒三角|侧三角|正三角的实现
- 宽带路由器中关于IP带宽控制功能的详解
- tensorflowpython32_Python tensorflow.python.framework.dtypes 模块,float32() 实例源码 - 编程字典...
- Windows server 2008 r2 基于LLS的Web和FTP服务搭建(基本)
- 聚焦 | 山东省大数据的发展现状与规划
- exports生效 nfs_共享存储Nfs使用
- 【游戏客户端】制作节奏大师Like音游(上)
- cpc金价难以琢磨 投行是否成“南郭先生”