要利用Glide提供的缓存并确保每次都能显示正确的图像,可以使用signature()API。
您要做的就是将与图像文件有关的信息设置为签名。当您替换该文件时,信息也会更改,并且Glide知道它必须重新加载它,而忽略了缓存。
有效信息可以是根据文件内容计算出的摘要(例如SHA-1)。
Glide.with(context)
.load(inputFile)
.signature(new StringSignature(sha1(inputFile)))
.into(targetImageView);
在这里,我找到了sha1()函数的以下实现:
public static String sha1(final File file) throws NoSuchAlgorithmException, IOException {
final MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
try (InputStream is = new BufferedInputStream(new FileInputStream(file)) {
final byte[] buffer = new byte[1024];
for (int read = 0; (read = is.read(buffer)) != -1;) {
messageDigest.update(buffer, 0, read);
}
}
try (Formatter formatter = new Formatter()) {
for (final byte b : messageDigest.digest()) {
formatter.format("%02x", b);
}
return formatter.toString();
}
}