深入探討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);
相關推薦:
以上是深入探討Glide的快取機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

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

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

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

testthepdfinanotherapptoderineiftheissueiswiththefileoredge.2.enablethebuilt inpdfviewerbyTurningOff“ eflblyopenpenpenpenpenpdffilesexternally”和“ downloadpdffiles” inedgesettings.3.clearbrowsingdatainclorwearbrowsingdataincludingcookiesandcachedcachedfileresteroresoreloresorelorsolesoresolesoresolvereresoreorsolvereresoreolversorelesoresolvererverenn

Importjava.ioandjava.net.SocketforI/Oandsocketcommunication.2.CreateaSocketobjecttoconnecttotheserverusinghostnameandport.3.UsePrintWritertosenddataviaoutputstreamandBufferedReadertoreadserverresponsesfrominputstream.4.Usetry-with-resourcestoautomati

容器化Java應用:創建Dockerfile,使用基礎鏡像如eclipse-temurin:17-jre-alpine,複製JAR文件並定義啟動命令,通過dockerbuild構建鏡像並用dockerrun測試本地運行。 2.推送鏡像到容器註冊表:使用dockertag標記鏡像並推送到DockerHub等註冊表,需先登錄dockerlogin。 3.部署到Kubernetes:編寫deployment.yaml定義Deployment,設置副本數、容器鏡像和資源限制,編寫service.yaml創建

VSCode中可通過快捷鍵快速切換面板與編輯區。要跳轉至左側資源管理器面板,使用Ctrl Shift E(Windows/Linux)或Cmd Shift E(Mac);返回編輯區可用Ctrl `或Esc或Ctrl 1~9。相比鼠標操作,鍵盤快捷鍵更高效且不打斷編碼節奏。其他技巧包括:Ctrl KCtrl E聚焦搜索框,F2重命名文件,Delete刪除文件,Enter打開文件,方向鍵展開/收起文件夾。

runthewindowsupdatetrubloubleshooterviaSettings>更新&安全> is esseShootsoAtomationfixCommonissues.2.ResetWindowSupDateComponentsByStoppingRealatedServices,RenamingTheSoftWaredWaredWaredSoftwaredSistribution andCatroot2Folders,intrestrestartingthertingthertingtherserviceSteStoceTocle

AwhileloopinJavarepeatedlyexecutescodeaslongastheconditionistrue;2.Initializeacontrolvariablebeforetheloop;3.Definetheloopconditionusingabooleanexpression;4.Updatethecontrolvariableinsidethelooptopreventinfinitelooping;5.Useexampleslikeprintingnumber

JavaserializationConvertSanObject'SstateIntoAbyTeSteAmForStorageorTransermission,andDeserializationReconstructstheObjectStheObjectFromThstream.1.toenableserialization,aclassMustimustimplementTheSerializableizableface.2.UseObjectObjectObjectObjectOutputputputputputtreamToserialializeanobectizeanobectementeabectenobexpent,savin

NumPy是Python中進行科學計算的核心庫,擅長處理線性代數運算,提供高效的ndarray數組和numpy.linalg模塊中的函數。 1.使用np.linalg.solve(A,b)可求解線性方程組Ax=b,得到解向量x;2.矩陣轉置通過A.T實現;3.矩陣乘法可用np.dot(A,B)或A@B;4.矩陣逆通過np.linalg.inv(A)計算,需確保矩陣可逆;5.行列式由np.linalg.det(A)給出;6.特徵值與特徵向量通過np.linalg.eig(A)求得,特徵向量已歸一化;
