【问题标题】:Glide Cache does not persist when app is killed当应用程序被杀死时,Glide Cache 不会持续存在
【发布时间】:2020-01-30 19:11:53
【问题描述】:

我正在监视我与 Charles 的网络通话。

我有一个 GlideModule 通过像这样覆盖 applyOption(...) 来更改缓存文件夹:

    @Override
public void applyOptions(Context context, GlideBuilder builder) {
    builder.setDiskCache(
            new InternalCacheDiskCacheFactory(context, "/media/", 1500000)
    );
}

然后,我加载 Glide 图像,当我在应用程序中时,缓存工作正常。这是一个例子:

Glide.with(this)
            .load("http://www.wired.com/wp-content/uploads/2015/09/google-logo.jpg")
            .into(mImageView);

只有第一次调用会发起网络调用,然后它会使用缓存来检索它。 但是,如果我杀死该应用程序然后重新启动它,而不是继续使用缓存,该应用程序会发起一个新的网络调用。 缓存不应该在内部存储中持久存在吗?

【问题讨论】:

  • 已经读过了,默认行为会缓存所有版本的图像,因为当我在应用程序中缓存工作正常时,情况就是如此。
  • @Magnas 你找到解决办法了吗?

标签: android caching android-glide


【解决方案1】:
Glide.with(fragment)
  .load(url)
  .diskCacheStrategy(DiskCacheStrategy.ALL)
  .into(imageView);

【讨论】:

  • 它不工作。当我销毁应用程序并重新启动它的加载时..
【解决方案2】:

增加diskCacheSize 看看会发生什么。 1500000 是 1.5mb,它可以包含有限数量的图片(取决于每个大小)。当达到限制时,旧的缓存图像将被新的图像替换。

所以无论diskCacheSize有多大,当超过它时,旧的缓存图像将被新的图像替换。

还要注意,除了“磁盘缓存”之外,Glide 会将图像保存在内存中,直到满足某些条件才能释放它们(活动终止,内存不足,...)。这就是为什么它不会在应用程序运行时再次下载未缓存的图像,因为它通过内存访问它们。

【讨论】:

    【解决方案3】:

    是的,这是 glide 库的基本功能,它在第一次下载图像时获取所有缓存,然后每次下载时都会从缓存中为您提供图像。

    如果您只面对问题,那么根据我的观点,如果您现有的系统不依赖于公会,您应该使用 Picasso 进行图像处理。

    【讨论】:

      【解决方案4】:

      您可以使用 sqllite 下载图像并存储在应用程序的内部存储中,然后通过“.load()”中的本地 URL 从那里加载图像。

      但是在这里每次您的滑翔被调用时,它都会直接使用 URL 加载图像 因为您在“.load()”方法中传递 URL,它不仅会在重新启动应用程序后进行网络调用,它还会在应用程序中调用时进行网络调用,就像您在回收站视图中使用它一样。

      【讨论】:

        猜你喜欢
        • 2021-02-14
        • 1970-01-01
        • 2018-10-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-17
        • 1970-01-01
        • 2013-09-19
        • 1970-01-01
        相关资源
        最近更新 更多