搜尋
首頁类库下载java类库深入探討Glide的快取機制

開始之前,我們需要將xerces.jar 和 xalan.jar檔案放入java.class.path目錄下(這兩個檔案包含在Xalan-Java 1.2 中,可以從xml.apache.org處下載)。

1.Glide快取簡介

2.快取Key

EngineKey

重寫了equals()和hashCode()方法,保證只有傳入EngineKey的所有參數都相同的情況下才認為是同一個EngineKey物件

#3.記憶體快取

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

LruCache演算法(Least Recently Used)
Android高效載入大圖、多圖解決方案,有效避免程式OOM

很容易就讓人想到LruCache演算法(Least Recently Used),也叫近期最少使用演算法。它的主要演算法原理就是把最近使用的物件用強引用儲存在LinkedHashMap中,並且把最近最少使用的物件在快取值達到預設定值之前從記憶體中移除。 LruCache的用法也比較簡單
 loadFromCache()方法來取得快取圖片,如果取得到就直接呼叫cb.onResourceReady()方法進行回呼。如果沒有取得到,則會在第26行呼叫loadFromActiveResources()方法來取得快取圖片,取得到的話也直接進行回調。只有在兩個方法都沒有取得到快取的情況下,才會繼續向下執行,從而開啟執行緒來載入圖片。

loadFromCache()和loadFromActiveResources()。這兩個方法中一個使用的就是LruCache演算法,另一個使用的就是弱引用。

硬碟快取

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()方法取得緩存,這兩個方法的差別其實就是DiskCacheStrategy.RESULT和DiskCacheStrategy.SOURCE這兩個參數的差別,相信不需要我再做什麼解釋。

進階技巧

例如之前有一位群組裡的朋友就跟我說過,他們專案的圖片資源都是存放在七牛雲上面的,而七牛雲為了對圖片資源進行保護,會在圖片url位址的基礎之上再加上一個token參數。也就是說,一張圖片的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類別.

Java連接mysql的方法_MySQL


以上是深入探討Glide的快取機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),