【问题标题】:In Android How can I Set Glide Signature (Cache expiry) for the cached Images在 Android 中,我如何为缓存的图像设置 Glide 签名(缓存到期)
【发布时间】:2021-11-15 13:43:45
【问题描述】:

我需要的是:我正在使用 glide 在我的应用程序中显示图像。我需要为 glide 中的缓存图像设置到期时间。我知道我们可以使用签名(现在更改为 GlideImageVersion)。我发现要将到期时间设置为 600 秒,我使用了“System.currentTimeMillis()/(1000 * 60 *10)”。

编辑:从技术上讲,到期意味着,我需要为签名设置一个值,并且该值不应在 3,628,800 秒(60,480 分钟)内改变。

600 秒:

 currentTime = System.currentTimeMillis()
 ExpiryFor10mins = currentTime / (1000*60*10)  //For 10 minutes
Glide.with(getActivity())
    .load(mUser.getCoverPhoto())
    .error(R.drawable.bg_1)
    .signature(new StringSignature(ExpiryFor10mins.toInt())
    .listener(new RequestListener<String, GlideDrawable>() {
        @Override
        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
            mTextBioOther.setVisibility(!isMe ? View.VISIBLE : View.GONE);
            return false;
        }

        @Override
        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
            mTextBioOther.setVisibility(!isMe ? View.VISIBLE : View.GONE);
            return false;
        }
    })
    .into(mImageCover);

但我需要将此缓存到期时间设置为 3,628,800 秒,即 6 周。任何人都可以帮助弄清楚这个数学吗?提前谢谢...

【问题讨论】:

  • 您是要清除所有缓存,还是清除单个图像缓存?\
  • 我要清除单个图像缓存...
  • 我认为这在 glide 中是不可能的,您可以使用签名覆盖相同的 url,但不能为单个图像清除缓存
  • 我不想清除缓存。从技术上讲,我需要使用签名覆盖相同的 Url。我现在使用的签名是 "System.currentTimeMillis()/(1000 * 60 *10)" 。这给出了一个在 10 分钟内不会改变的值。所以在那 10 分钟内,我将从缓存中获取图像。 10分钟后,当签名值发生变化时,glide会覆盖Url,所以会重新下载图片。但我需要一个数学来使签名在 6 周(60,480 分钟)内不变
  • 这个签名是否工作了 10 分钟(600000 毫秒)??

标签: android android-studio android-glide cache-control cache-expiration


【解决方案1】:

您可以为此使用您自己的 SharedPreferences,我知道它有很长的路要走,但非常适合您的情况,让我们举个例子:-

SharedPreferences signaturePref = getActivity().getSharedPreferences("signature_for_glide",MODE_PRIVATE);

// take default value 0 till its not saved
// get save signature for current image
long savedSignature = signaturePref.getLong(mUser.getCoverPhoto().trim(),0);
long currentTime = System.currentTimeMillis();

if((currentTime - savedSignature) > 6 weeks millseconds){
    savedSignature = currentTime;
    signaturePref.putLong(mUser.getCoverPhoto().trim(),savedSignature);
}

Glide.with(getActivity())
    .load(mUser.getCoverPhoto())
    .error(R.drawable.bg_1)
    .signature(new StringSignature(savedSignature))
    .listener(new RequestListener<String, GlideDrawable>() {
        @Override
        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
            mTextBioOther.setVisibility(!isMe ? View.VISIBLE : View.GONE);
            return false;
        }

        @Override
        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
            mTextBioOther.setVisibility(!isMe ? View.VISIBLE : View.GONE);
            return false;
        }
    })
    .into(mImageCover);

试试这个解决方案,如果有任何错误请。问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-17
    • 2020-08-05
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 2020-09-23
    • 1970-01-01
    相关资源
    最近更新 更多