Before we begin, we need to put the xerces.jar and xalan.jar files into the java.class.path directory (these two files are included in Xalan-Java 1.2 and can be downloaded from xml.apache.org).
1. Introduction to Glide cache
EngineKey
The equals() and hashCode() methods are rewritten to ensure The same EngineKey object is considered to be the same only if all the parameters passed to the EngineKey are the same
Glide.with(this) .load(url) .skipMemoryCache(true) .into(imageView);
LruCache algorithm (Least Recently Used)
Android Efficiently load large images and multi-image solutions, effectively avoiding program OOM
It is very easy to think of the LruCache algorithm (Least Recently Used), also called the least recently used algorithm. Its main algorithm principle is to store the most recently used objects in LinkedHashMap with strong references, and remove the least recently used objects from memory before the cache value reaches the preset value. The usage of LruCache is also relatively simple
The loadFromCache() method is used to obtain the cached image. If obtained, the cb.onResourceReady() method is directly called for callback. If it is not obtained, the loadFromActiveResources() method will be called on line 26 to obtain the cached image. If it is obtained, a callback will be made directly. Only when neither method obtains the cache will the execution continue and the thread will be opened to load the image.
loadFromCache() and loadFromActiveResources(). One of these two methods uses the LruCache algorithm, and the other uses weak references.
Glide.with(this) .load(url) .diskCacheStrategy(DiskCacheStrategy.NONE) .into(imageView);
DiskCacheStrategy.NONE: Indicates not to cache any content.
DiskCacheStrategy.SOURCE: Indicates that only original images are cached.
DiskCacheStrategy.RESULT: Indicates that only the converted images will be cached (default option).
DiskCacheStrategy.ALL: Indicates that both original images and converted images are cached.
DiskLruCache
Android DiskLruCache is fully resolved and the best solution for hard disk caching
private Resource<?> decode() throws Exception { if (isDecodingFromCache()) { return decodeFromCache(); } else { return decodeFromSource(); } }
Here we will first call the decodeResultFromCache() method of DecodeJob to obtain the cache. If If it cannot be obtained, the decodeSourceFromCache() method will be called again to obtain the cache. The difference between these two methods is actually the difference between the two parameters of DiskCacheStrategy.RESULT and DiskCacheStrategy.SOURCE. I believe I don’t need to explain it further.
For example, a friend in the group told me before that the picture resources of their project are all stored on Qiniu Cloud, and In order to protect image resources, Qiniu Cloud will add a token parameter to the image URL address. In other words, the URL address of an image may be in the following format:
http://url.com/image.jpg?token=d9caa6e02c990b0a
public class MyGlideUrl extends GlideUrl { private String mUrl; public MyGlideUrl(String url) { super(url); mUrl = url; } @Override public String getCacheKey() { return mUrl.replace(findTokenParam(), ""); } private String findTokenParam() { String tokenParam = ""; int tokenKeyIndex = mUrl.indexOf("?token=") >= 0 ? mUrl.indexOf("?token=") : mUrl.indexOf("&token="); if (tokenKeyIndex != -1) { int nextAndIndex = mUrl.indexOf("&", tokenKeyIndex + 1); if (nextAndIndex != -1) { tokenParam = mUrl.substring(tokenKeyIndex + 1, nextAndIndex + 1); } else { tokenParam = mUrl.substring(tokenKeyIndex); } } return tokenParam; } }
Glide.with(this) .load(new MyGlideUrl(url)) .into(imageView);
Related recommendations:
PHP implements the DatainputStream class in java.
Java method of connecting to mysql_MySQL
The above is the detailed content of In-depth exploration of Glide's caching mechanism. For more information, please follow other related articles on the PHP Chinese website!