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分析以及解决相关推荐

  1. Sentry UDFWhiteList bug分析

    Sentry UDFWhiteList bug分析 1 简介 此手册应用于row_number.unbase64.windowingtablefunction在开启sentry后不能执行的bug分析. ...

  2. 【转】PHP获取重定向URL的几种方法

    有时候我们会在开发中,经常会遇到有URL 301或 302重定向的情况,这时候我们可能需要获取重定向之后的url,下面我们介绍一下几种获取重定向url的方法: 1.用get_headers函数 php ...

  3. PHP获取重定向URL的几种方法

    有时候我们会在开发中,经常会遇到有URL 301或 302重定向的情况,这时候我们可能需要获取重定向之后的url,下面我们介绍一下几种获取重定向url的方法: 1.用get_headers函数 php ...

  4. java redirect 跨域_如何解决跨域重定向携带参数的问题?不使用将参数拼接在重定向url末尾的方式...

    如何解决跨域重定向携带参数的问题?不使用将参数拼接在重定向url末尾的方式 需求,项目A在服务器A上,需要重定向到服务器B上项目B,并且需要携带参数,参数对用户不可见,所以不可以将参数拼接在重定向ur ...

  5. java重定向url有参数吗_JavaScript重定向URL参数的两种方法小结

    这篇文章主要介绍的是JavaScript重定向URL参数的两种方法,下面话不多说,直接看示例代码. 一.字符拼接形式 function setUri(para, val) { var strNewUr ...

  6. vue页面渲染(请求返回的后端)data,文本换行与显示bug 的分析与解决提示

    vue页面渲染(请求返回的后端)data,文本换行与显示bug 的分析与解决提示 问题说明: vue项目,后台一经修改文案[介绍内容]后,前端接收显示实时数据,却无法换行? 原因分析: 后台页面的表单 ...

  7. phpcmsV9导航栏目点击跳转始终是localhost首页 bug - 分析篇

    文章目录 发现点哪个栏目却都跳到了localhost首页! 一开始,我以为?是因为在后台给栏目添加设置了show模板? 后来发现,并不是我想的那样.在后台多更新了几次各种缓存,浏览器多Ctrl+F5刷 ...

  8. easyUi reload 重定向URL

    今天在做工资流程操作的时候,需要根据下拉 展示不同的 流程信息. 使用 easyUi 的 $("dg").datagrid('reload'); 只是重载当前的URL, 无法根据类 ...

  9. 最近一个快要结束的项目的BUG分析

    "当Bug跟踪系统上所有的bug都被打上Closed后,你是否感到如释重负.当项目成功交付后你是否感到大脑进入了"冬眠"期,上网,聊天,写自己感兴趣的小程序,但是对于上个 ...

  10. 机器学习在基于 URL 的客户端监控分析中的优化和实践

    本文首发于"Shopee技术团队" 摘要 传统的客户端监控分析场景中,采用按照具体的 URL 进行统计分析的方法,在面对一个应用可能会访问成千上万条 URL 时,结果就差强人意,不 ...

最新文章

  1. 简单XML文件C#操作方法
  2. 基于Android的浮动组件,可以用于应用中的新功能展示等等。
  3. Qt for ios 设置程序显示名称
  4. ThreadLocal知识点详解
  5. mysql数据库加载太慢_使用MySQL数据库很慢
  6. java热门编程题_java经典50编程题(1-10)
  7. matlab7.0 win10安装报错,win10系统安装Matlab7.0后出现Runtime Error警告窗口的技巧介绍...
  8. 更好的图片压缩途径: WebP探索之路
  9. 计算机管理系统权限申请审批表,开通权限申请书范文
  10. OpenGL学习笔记:GLAD和第一个窗口
  11. postfix反垃圾邮件说明
  12. 鸿蒙os下载到电脑上,华为鸿蒙os系统官网
  13. 移动端框架之mand-mobile
  14. HTML基础--标签VSCode常用快捷方式和插件
  15. 解开神经科学中的交叉频率耦合
  16. 文件类型关联的文件图标
  17. 国际短信系统平台发送接口说明方法|网页短信平台开发搭建-移讯云短信系统
  18. Excel插入图片(C#)
  19. vue部署至Tomcat,F5刷新报404问题解决
  20. 华为手机老是android自动升级,安卓手机系统升级!华为手机系统更新设置

热门文章

  1. ArcGIS For Unity3D(一)—— 在Unity3D中开启ArcGIS
  2. java workbook.close_找不到符号Workbook.close()
  3. CSS 分析倒三角|侧三角|正三角的实现
  4. 宽带路由器中关于IP带宽控制功能的详解
  5. tensorflowpython32_Python tensorflow.python.framework.dtypes 模块,float32() 实例源码 - 编程字典...
  6. Windows server 2008 r2 基于LLS的Web和FTP服务搭建(基本)
  7. 聚焦 | 山东省大数据的发展现状与规划
  8. exports生效 nfs_共享存储Nfs使用
  9. 【游戏客户端】制作节奏大师Like音游(上)
  10. cpc金价难以琢磨 投行是否成“南郭先生”