ホームページ  >  記事  >  类库下载  >  Glide のキャッシュ メカニズムを詳しく理解する

Glide のキャッシュ メカニズムを詳しく理解する

坏嘻嘻
坏嘻嘻オリジナル
2018-09-14 10:29:412956ブラウズ

始める前に、xerces.jar ファイルと xalan.jar ファイルを java.class.path ディレクトリに置く必要があります (これら 2 つのファイルは Xalan-Java 1.2 に含まれており、xml.apache.org からダウンロードできます)。 。

1. Glide キャッシュの概要

2. キャッシュ キー

EngineKey

equals() メソッドと hashCode() メソッドは次のように書き換えられます。 EngineKey に渡されるすべてのパラメータが同じである場合にのみ、同じ EngineKey オブジェクトが同じであるとみなされるようにします。

3. メモリ キャッシュ

Glide.with(this)
     .load(url)
     .skipMemoryCache(true)
     .into(imageView);

LruCache アルゴリズム (最も最近使用されたもの)
Android 大きな画像と複数画像のソリューションを効率的に読み込み、プログラムの OOM を効果的に回避

#​​
##LruCache アルゴリズム (最も最近使用されていないアルゴリズムとも呼ばれる) を考えるのは非常に簡単です。 。その主なアルゴリズム原理は、最近使用されたオブジェクトを強参照とともに LinkedHashMap に保存し、キャッシュ値が事前設定値に達する前に、最も最近使用されていないオブジェクトをメモリから削除することです。 LruCache の使用法も比較的簡単です

キャッシュされたイメージを取得するには、loadFromCache() メソッドが使用されます。取得した場合は、コールバックのために cb.onResourceReady() メソッドが直接呼び出されます。取得されていない場合は、26 行目でloadFromActiveResources() メソッドが呼び出され、キャッシュされたイメージが取得された場合は、直接コールバックが行われます。どちらのメソッドもキャッシュを取得しない場合にのみ、実行は続行され、イメージをロードするためにスレッドが開かれます。

loadFromCache() とloadFromActiveResources()。これら 2 つの方法のうち 1 つは LruCache アルゴリズムを使用し、もう 1 つは弱い参照を使用します。

ハードディスク キャッシュ

Glide.with(this)
     .load(url)
     .diskCacheStrategy(DiskCacheStrategy.NONE)
     .into(imageView);

DiskCacheStrategy.NONE: コンテンツをキャッシュしないことを示します。

DiskCacheStrategy.SOURCE: 元のイメージのみがキャッシュされることを示します。
DiskCacheStrategy.RESULT: 変換されたイメージのみがキャッシュされることを示します (デフォルト オプション)。
DiskCacheStrategy.ALL: 元のイメージと変換されたイメージの両方がキャッシュされることを示します。

DiskLruCache

Android DiskLruCache は完全に解決され、ハードディスク キャッシュに最適なソリューションです

private Resource<?> decode() throws Exception {    if (isDecodingFromCache()) {        return decodeFromCache();
    } else {        return decodeFromSource();
    }
}

ここでは、まず DecodeJob の decodeResultFromCache() メソッドを呼び出して取得します。キャッシュを取得できない場合は、decodeSourceFromCache() メソッドが再度呼び出され、キャッシュを取得します。これ以上説明する必要はありません。

高度なスキル

たとえば、グループの友人が以前、プロジェクトの写真リソースはすべて Qiniu Cloud に保存されていると教えてくれました。画像リソースの場合、Qiniu Cloud は画像 URL アドレスにトークン パラメーターを追加します。つまり、画像の URL アドレスは次の形式になります:

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);
関連する推奨事項:

PHP は Java で DatainputStream クラスを実装します。

mysql_MySQL に接続する Java メソッド


以上がGlide のキャッシュ メカニズムを詳しく理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。