You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android下如何通过Glide的Signature配置实现图片缓存6周过期

Glide 6周缓存过期的签名计算公式

核心逻辑说明

你之前10分钟缓存的实现逻辑是成立的:通过将当前毫秒级时间戳除以缓存周期对应的总毫秒数,得到的整数结果会在整个缓存周期内保持不变,一旦超过缓存周期数值就会+1,触发Glide的signature变化,自动废弃旧缓存拉取新资源。

6周缓存对应的计算公式

3628800秒对应的总毫秒数为 1000 * 3628800,对应的计算代码有两种等价写法,第二种按时间单位拆分可读性更高:

val currentTime = System.currentTimeMillis()
// 写法1:直接用秒数换算
val expiryFor6Weeks = currentTime / (1000 * 3628800) 
// 写法2:按时间单位拆分:1000毫秒/秒 * 60秒/分 * 60分/小时 * 24小时/天 *7天/周 *6周
// val expiryFor6Weeks = currentTime / (1000 * 60 * 60 * 24 * 7 * 6)

完整替换后的Glide加载代码

long currentTime = System.currentTimeMillis();
long ExpiryFor6Weeks = currentTime / (1000 * 3628800);
Glide.with(getActivity())
    .load(mUser.getCoverPhoto())
    .error(R.drawable.bg_1)
    .signature(new StringSignature(String.valueOf(ExpiryFor6Weeks)))
    .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);

注意说明

这里建议将数值转为String传入StringSignature,避免int类型溢出问题:当前时间戳除以6周毫秒数得到的结果增长速度极慢,约49710年才会达到int最大值(2^31-1),常规业务场景下完全不需要担心溢出,转String只是更稳妥的通用写法。

内容的提问来源于stack exchange,提问作者CavinAndro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:15:00