相同URL的最佳性能,使用Glide V4的不同图像

时间:2018-05-18 11:23:29

标签: android android-glide

在我的应用程序中,我从服务器获取图像到Imageview。我使用这段代码:

 try {
            GlideApp.with(mContext)
                    .load(myCard.url)
                    .placeholder(R.drawable.no_connection)
                    .apply(new RequestOptions().centerCrop())
                    .diskCacheStrategy(DiskCacheStrategy.NONE)
                    .skipMemoryCache(true)
                    .into(arkafon);
        } catch (Exception e) {
            e.printStackTrace();
        }

它可以工作,但每次应用程序下载图像作为一个新的,因此互联网使用量增加。是否可以检查图像是否已更改,应用程序应下载新的图像。否则如果图像应用程序没有变化应该使用在图像之前下载。

3 个答案:

答案 0 :(得分:2)

如果要加载与先前加载的文件同名的新图像,则必须具有一个将定义图像唯一性的字段。 我给你举个例子:假设你有一个带有url的个人资料图片,所以你还需要一个标志告诉我们最新更新的日期和时间 如果你有这种独特性,你可以通过下面的代码加载图像。 在下面的示例中,我的lastModified是唯一字段。

Glide.with(this)
        .load(avatarFile)
        .diskCacheStrategy(DiskCacheStrategy.RESULT)
        .signature(new StringSignature(String.valueOf(avatarFile.lastModified())))
        .into(ivProfile);

答案 1 :(得分:0)

它看起来很丑,但这是我的解决方案

import java.util.Calendar;
import java.util.Date;

Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        try {
            GlideApp.with(mContext)
                    .load(myCard.url)
                    .placeholder(R.drawable.no_connection)
                    .apply(new RequestOptions().centerCrop())
                    .signature(new ObjectKey(String.valueOf(cal.get(Calendar.MONTH))))
                    .into(arkafon);
        } catch (Exception e) { 
        }

它会每月更新所有图片,如果您以前想要,可以使用Calendar.WEEK_OF_YEAR

答案 2 :(得分:0)

我也遇到了这个问题,终于找到了这个问题,解决了这个问题。请参阅此Glide issue

我的代码是这样的。 DataSave 是 SharedPreferences 的实用程序类。

String oldSignature = DataSave.readData(signatureKey);
String newSignature = String.valueOf(System.currentTimeMillis());
DataSave.saveData(signatureKey, newSignature);

Glide.with(context)
        .load(glideUrl)
        .thumbnail(Glide.with(context)
                .load(glideUrl)
                .signature(new ObjectKey(oldSignature)))
        .signature(new ObjectKey(newSignature))
        .placeholder(placeHolder)
        .error(placeHolder)
        .listener(listener)
        .into(imageView);