Home  >  Article  >  类库下载  >  In-depth exploration of Glide’s caching mechanism

In-depth exploration of Glide’s caching mechanism

坏嘻嘻
坏嘻嘻Original
2018-09-14 10:29:412835browse

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

2. Cache Key

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

3. Memory cache

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.

Hard Disk Cache

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.

Advanced skills

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn