Glide:如何查找图像是否已缓存并使用缓存版本?

2024-01-09

Scenario:

我有一个大的 GIF 图像,我想在用户第一次使用它打开应用程序时缓存该图像Glide https://github.com/bumptech/glide- 图像加载和缓存库。之后,每当用户打开应用程序时,我想显示缓存的版本(如果存在)。此 GIF URL 将在给定的时间间隔后过期。当它过期时,我会获取新的 GIF URL 并显示/缓存以供将来使用。

我尝试过的:

我经历了缓存和缓存失效 https://github.com/bumptech/glide/wiki/Caching-and-Cache-Invalidation在 Glide 的 github 页面上。我还浏览了 Google Group 线程确保加载的图像仅来自磁盘缓存 https://groups.google.com/forum/#!topic/glidelibrary/TcFOy0tcxXA,它展示了如何获取图像表单缓存。我也经历过如何使某些特定图像的 Glide 缓存失效 https://stackoverflow.com/questions/31537669/how-to-invalidate-glide-cache-for-some-specific-images问题。

从上面的链接我看到以下代码片段,它显示了如何从缓存加载图像。然而,这只尝试从缓存中获取图像。如果缓存中不存在,则不会尝试从网络获取并失败:

Glide.with(TheActivity.this)
        .using(new StreamModelLoader<String>() {
            @Override
            public DataFetcher<InputStream> getResourceFetcher(final String model, int i, int i1) {
                return new DataFetcher<InputStream>() {
                    @Override
                    public InputStream loadData(Priority priority) throws Exception {
                        throw new IOException();
                    }

                    @Override
                    public void cleanup() {
                    }

                    @Override
                    public String getId() {
                        return model;
                    }

                    @Override
                    public void cancel() {
                    }
                };
            }
        })
       .load("http://sampleurl.com/sample.gif")
       .diskCacheStrategy(DiskCacheStrategy.SOURCE)
       .into(theImageView);

问题:

  1. 是否有更干净的方法来实现以下目标:如果存在,则显示缓存中的 GIF 图像,否则下载 GIF,缓存它以供以后使用,并将其显示在ImageView.

  2. 上面的缓存文章提到了以下内容:

    实际上,使缓存文件失效的最佳方法是更改 内容更改时的标识符(url、uri、文件路径等)

    当前一个 URL 过期时,服务器会向应用程序发送一个不同的 URL。在这种情况下,我相信旧图像最终会被垃圾收集?有没有办法强制从缓存中删除图像?

  3. 同样,是否有一种方法可以防止对具有特定密钥的图像进行垃圾收集(以防止再次下载大文件),然后指示在 URL 更改时从缓存中删除旧图像?


  1. 您不需要自定义 ModelLoader 来显示缓存中的 GIF(如果存在)并获取它,否则,这实际上是 Glide 的默认行为。只需使用标准负载线就可以正常工作:

    Glide.with(TheActivity.this)
       .load("http://sampleurl.com/sample.gif")
       .diskCacheStrategy(DiskCacheStrategy.SOURCE)
       .into(theImageView);
    

您的代码将阻止 Glide 下载 GIF,并且仅显示已缓存的 GIF,这听起来像是您不希望的。

  1. 是的,旧图像最终将被删除。默认情况下,Glide 使用 LRU 缓存,因此当缓存已满时,最近最少使用的图像将被删除。如果需要,您可以轻松自定义缓存的大小以帮助实现此目的。请参阅配置 https://github.com/bumptech/glide/wiki/Configuration#size有关如何更改缓存大小的 wiki 页面。

  2. 不幸的是,没有任何方法可以直接影响缓存的内容。您不能显式删除某项,也不能强制保留一项。在实践中,使用适当的磁盘缓存大小,您通常不需要担心这样做。如果您足够频繁地显示图像,它就不会被驱逐。如果您尝试缓存其他项目并耗尽缓存空间,较旧的项目将被自动驱逐以腾出空间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Glide:如何查找图像是否已缓存并使用缓存版本? 的相关文章

  • 发生存储异常。无法在firebase中上传图片

    在我能够更改图像并将其上传到 firebase 之前 这段代码就可以工作 但现在我突然收到此错误 我不知道问题是什么 public class SettingsActivity extends AppCompatActivity priva
  • 更改首选项的背景颜色

    我有一个PreferenceCategory xml 文件 我已经在其中定义了所有首选项 我从扩展的类中调用它PreferenceActivity 我无法设置设置屏幕的背景 该屏幕是在如下所示的 xml 文件的帮助下显示的 请看我已经定义了
  • 如何检测android中的颠倒方向?

    在我的 Android 应用程序中 我有全景图像 并且我使用 TYPE ORIENTATION 传感器根据手机运动旋转该图像 它对于横向和纵向都工作良好 这是旋转逻辑的代码 Override public void onSensorChan
  • Android,让文本切换器成为中心?

    如何集中我的文本切换器 我尝试过设置重力 但似乎不起作用 ts setFactory new ViewFactory public View makeView TextView t new TextView this t setTypefa
  • 不使用 CookieManager 的 Android 会话 cookie

    我的应用程序进行多次网络调用以获得身份验证 我需要将此会话存储在 cookie 中 我想使用 Cookie Manager 但经过一些研究后 我发现它仅适用于 API 9 及更高版本 并且我的应用程序需要向后兼容 我使用 HTTPURLCo
  • 注销时Firebase facebook按钮android身份验证

    我在我的 Android 应用程序中使用 firebase 并在 facebook SDK 中使用登录 我面临的唯一问题是 当我使用 facebook 登录然后注销时 facebook 登录按钮处于 注销 状态 当我单击它时 它会询问我是否
  • 用于代码生成的 ANTLR 工具版本 4.7.1 与当前运行时版本 4.5.3 不匹配

    我正在开发一个 Android 应用程序 当前使用 DSL 和一些库 突然构建给了我这个错误 任务 app kaptDebugKotlin 失败 用于代码生成的 ANTLR 工具版本 4 7 1 与当前运行时版本 4 5 3 不匹配 用于解
  • NullPointerException org.chromium.android_webview.AwContents$AwViewMethodsImpl.onDragEvent

    大约 10 天前 我的应用程序开始记录此异常 在开发控制台上看到 java lang NullPointerException at org chromium android webview AwContents AwViewMethods
  • 如何在代码中设置TextView的文字颜色?

    在 XML 中 我们可以通过以下方式设置文本颜色textColor属性 比如android textColor FF0000 但如何通过编码来改变它呢 我尝试过类似的东西 holder text setTextColor R color R
  • Android接收通知打开和取消事件

    我从 webService 接收数据以生成自定义通知 我想追踪Intent要知道open 点击 或cancel 滑动 通知上的事件 以报告服务器进行分析 有没有听众onIntentStart or onIntentCanceled 也许是通
  • 来自外部 XML 的 Android 本地化

    是否可以使用从服务接收到的 XML 在运行时翻译 Android 应用程序 如果可能的话 请有人指出我正确的方向 谢谢 Warning 我读到的所有内容都表明 让您的应用程序更改语言不是一个好主意 因为 Android 框架不支持它 并且可
  • 我可以使用“导入 com.facebook.FacebookSdk;”使用 Facebook SDK 3.23.1?

    在我的 app build gradle 文件中 我有compile com facebook android facebook android sdk 3 23 1 在我的 BaseActivity java 文件 其中有 public
  • 将搜索结果更新为 Android 中的 Lazy Adapter

    我有项目列表 想为其实现搜索功能 因此 我有一个带有 addTextChangedListener 的文本框 搜索结果运行良好 但当我尝试将结果设置为 ListView 时 新结果将附加到旧结果中 我正在使用惰性适配器 如何清除适配器中的旧
  • ImageButton 拉伸背景图像

    我正在尝试创建一个没有边框的 ImageButton 但遇到了图像按钮大小的问题 我使用 Eclipse ADT 将 ImageButton 拖到布局中并选择背景图像 图像按钮显示如下 正如您所看到的 背景图像和图像按钮周边之间有一个边框
  • 对基本适配器类及其功能的疑问

    我正在尝试自定义列表视图 我使用数组列表添加对象列表 并将其发送到扩展基本适配器的类 当我扩展基本适配器类时 它实现了一些方法 例如 getView 等 在 getView 中 我将其发送到将名称 数据 分配给 XML 格式的自定义菜单的类
  • 如何在Android中隐藏应用程序标题? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想隐藏应用程序标题栏 您可以通过编程来完成 import android app Activity import android os
  • 改造Android基本且简单的问题

    我的服务器返回简单的 Json 结果 如下所示 message Upload Success 我正在尝试将结果放入改造模型类中 public class MyResponse SerializedName message String me
  • Android 将菜单项在操作栏中向左对齐

    我的应用程序中有一个操作栏 它显示我定义的菜单项res menu activity main xml 我的菜单项在操作栏上向右对齐 我希望它们左对齐 我为此找到的唯一解决方案使用了自定义操作栏 如下所示 将菜单项放置在 Honeycomb
  • MPAndroidChart:组合图表

    我在用MPAndroidChart 库 https github com PhilJay MPAndroidChart 我想用CombinedChart创建这样的图表 那可能吗 我尝试了一下 但似乎不起作用 因为 这些条目没有按我的预期工作
  • 将 firebase 消息传递添加到 flutter android 项目时出现依赖错误

    我已将 firebase 消息传递添加到我的 Flutter 项目中 在 iOS 上运行良好 在 Android 上运行时出现错误 Android dependency androidx localbroadcastmanager loca

随机推荐

  • 安装后如何添加更多Qt版本?

    我已经安装了开源 Qt 5 5 0 设置如下 Kits Desktop Qt 5 4 2 MSVC2013 64bit2 Desktop Qt 5 5 0 MSVC2013 64bit Qt 版本 Qt 5 4 2 MSVC2013 64b
  • Rails - image.png 未预编译

    我正在尝试在 Amazon 的 EC2 服务器上部署 Web 应用程序 并且我将代码放在服务器上 一切看起来都正常 但是当我进入主页时 我收到一条 500 错误消息 并且production log文件给我以下错误 ActionView T
  • iPhone(SDK 2.2):在不主动使用 AVFoundation 播放音乐时调整播放音量?

    所以我有一个可以播放许多简短声音剪辑的应用程序 我需要知道声音何时播放完毕 并且我需要使用 mp3 因此我使用 AVFoundation 进行声音播放 当正在播放声音并且用户使用硬件音量按钮时 播放音量会发生变化 问题是 该应用程序不会不断
  • 在 Windows 8 应用程序中以编程方式使用 SSL 证书

    我需要这方面的帮助 我们的后端由自签名证书保护 我们称之为 OurMegaCool Certificate cer 因此 我们已使用以下命令将此证书导入到我们的开发人员机器中证书管理器MSC 现在我们可以使用以下代码从后端检索数据 asyn
  • 截取 BlackBerry 中当前屏幕的屏幕截图

    是否可以在 BlackBerry 应用程序中截取当前屏幕的屏幕截图 我的屏幕上有一个按钮 当我单击该按钮时 我想发送一封包含当前屏幕截图的电子邮件 您可以使用以下方法获取显示屏幕的屏幕截图 public static Bitmap getS
  • mvc 3会话和authorizeAttribute

    我的网站对所有人开放 但我有一个控制器 其中有某种方法 只有具有用户名和密码的管理员才能输入 我正在拯救布尔IsManager in a session 我想使用授权属性来阻止任何人IsManager false 首先定义一个ActionF
  • 以编程方式导航时,Angular Router 旧组件保留在 dom 中

    角度版本 4 从登录后LoginComponent 位于public signin路线 我想导航到TestComponent在路径中public test 我这样做如下 this router navigate public test 然后
  • CSS - 三个可滚动等高主要内容列(流体高度)和粘性/始终可见的页脚

    我几乎浏览了这里和 Google 上的所有帖子 似乎找不到关于 3 个等高列 带有 真正 粘性页脚 的 CSS 布局问题的答案 布局要求如下 顶部标题部分 其中一行用于下拉菜单选项 另一行用于工具栏按钮 主要内容部分 有 3 个等高的列 中
  • Javascript 相当于 Python 的 locals() 吗?

    在Python中 我们可以使用内置函数获取当前范围内所有局部和全局变量的字典locals and globals 在 Javascript 中是否有一些等效的方法可以做到这一点 例如 我想做如下的事情 var foo function al
  • 使用值和引用参数类型重载的方法

    我有以下代码 class Calculator public int Sum int x int y return x y public int Sum out int x out int y x y 10 return x y class
  • d3:画笔更改单击鼠标悬停

    我正在尝试结合画笔选择 工具提示和单击事件来创建散点图 但似乎一旦我将画笔添加到 svg 画布 对象上的所有单击事件都会映射到鼠标悬停 有没有办法解决 下面的示例代码和 http jsfiddle net 7j8cr http jsfidd
  • 端口 7071 不可用。关闭使用该端口的进程,或使用 --port [-p] 指定另一个端口

    我尝试从本地运行 azure 函数应用程序 Http Triggerd API 使用 VS 代码 但我收到错误 端口 7071 不可用 使用该端口关闭进程 或使用 port p 指定另一个端口 我使用cmd提示符检查了使用的端口列表 但是7
  • 如何将 NSUInteger 转换为 NSString?

    你如何转换NSUInteger进入一个NSString 我已经尝试过但是我的NSString一直返回0 NSUInteger NamesCategoriesNSArrayCount self NamesCategoriesNSArray c
  • 从命令提示符或 PowerShell 调用 MSYS2 Shell

    从命令提示符或 PowerShell 开始 两者都可以 我可以弄清楚如何执行另一个给定的操作 如何调用 MSYS2 shell 来运行命令 更具体的问题 我包含此信息是为了避免 XY 问题 但我坚信最好通过回答上述 更一般的 问题来解决这个
  • 外部函数调用不同的包注意

    我正在准备一个 R 包以提交给 CRAN R CMD 检查给了我以下注释 外部函数调用不同的包 Fortran cinc 包 cmprsk Fortran crstm PACKAGE cmprsk 看 Writing R 的 系统和外语界面
  • 从 C# LINQ 解析 XML 时如何保留空白字符

    我需要在 C 代码或 XML 文档中做什么 以便 XDocument 解析器读取文字空白Values of XElements Background 我有一个 XML 文档 其中一部分如下所示
  • $settings 数组或 Config 类来存储项目设置?

    我应该如何存储项目设置 哪个更好 使用 settings包含我所有设置的数组 settings max photos 30 或创建一个单例Config类中包含所有设置 Class Config private max photos 30 有
  • linux top 显示java线程?

    在Linux服务器 fedora 中 我们运行单个JBOSS应用程序服务器 并使用quartz来调度我们的任务 昨天 我使用 top 命令来查看进程状态 查看多个名为Java显示不同的pid 但是如果我使用 ps aux grep java
  • 在滚动条到达底部之前执行 100px 的操作

    我有下面的 Javascript 当滚动条到达页面底部时 警报就会按预期显示 但是 我希望这发生在 100 像素处before它到达底部 我该怎么做呢 window scroll function if window scrollTop d
  • Glide:如何查找图像是否已缓存并使用缓存版本?

    Scenario 我有一个大的 GIF 图像 我想在用户第一次使用它打开应用程序时缓存该图像Glide https github com bumptech glide 图像加载和缓存库 之后 每当用户打开应用程序时 我想显示缓存的版本 如果