偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

聊聊Glide緩存機(jī)制

存儲(chǔ) 存儲(chǔ)架構(gòu)
內(nèi)存緩存/運(yùn)行時(shí)緩存分為兩部分:活動(dòng)緩存(ActiveResource)和Lru內(nèi)存緩存(LruResourceCache)。

緩存機(jī)制簡(jiǎn)介

1、緩存的圖片資源

原始圖片(Source) :即圖片源的圖片初始大小和分辨率;

轉(zhuǎn)換后的圖片(Result) :經(jīng)過(guò)尺寸縮放和大小壓縮等處理后的圖片;

當(dāng)使用Glide加載圖片時(shí),Glide會(huì)默認(rèn)根據(jù)View視圖對(duì)圖片進(jìn)行壓縮和轉(zhuǎn)換,而不顯示原始圖。(這也是Glide加載速度高于Picasso的原因)

2、緩存機(jī)制設(shè)計(jì)

Glide的緩存功能設(shè)計(jì)成二級(jí)緩存:內(nèi)存緩存和硬盤(pán)緩存。(從網(wǎng)絡(luò)加載不屬于緩存)

內(nèi)存緩存:防止重復(fù)將圖片讀入到內(nèi)存,造成內(nèi)存資源浪費(fèi),只緩存轉(zhuǎn)換后的圖片,而不是原始圖片;

磁盤(pán)緩存:防止重復(fù)從網(wǎng)絡(luò)或其他地方下載和讀取數(shù)據(jù),可緩存原始圖片和轉(zhuǎn)換過(guò)后的圖片,用戶自行設(shè)置;

在Glide中,緩存的讀取順序?yàn)椋簝?nèi)存緩存 –> 磁盤(pán)緩存 –> 網(wǎng)絡(luò) ,內(nèi)存緩存和磁盤(pán)緩存相互不影響,獨(dú)立配置,內(nèi)存緩存是默認(rèn)開(kāi)啟的。

Glide的緩存機(jī)制使得Glide具備非常好的圖片緩存效果,從而使得具備較高的圖片加載效率。

以下是Glide的相關(guān)代碼:

// 默認(rèn)開(kāi)啟內(nèi)存緩存,用戶不需要作任何設(shè)置
Glide.with(this).load(url).into(imageView);
// 可通過(guò)API禁用內(nèi)存緩存功能
Glide.with(this).load(url).skipMemoryCache(true) // 禁用內(nèi)存緩存
.into(imageView);
Glide.with(this).load(url)
.diskCacheStrategy(DiskCacheStrategy.NONE) // 不緩存任何圖片,即禁用磁盤(pán)緩存
.into(imageView);
// DiskCacheStrategy.NONE:不緩存任何圖片,即禁用磁盤(pán)緩存
// DiskCacheStrategy.ALL :緩存原始圖片 & 轉(zhuǎn)換后的圖片
// DiskCacheStrategy.SOURCE:只緩存原始圖片(原來(lái)的全分辨率的圖像,即不緩存轉(zhuǎn)換后的圖片)
// DiskCacheStrategy.RESULT:(默認(rèn))只緩存轉(zhuǎn)換后的圖片(即最終的圖像:降低分辨率后 / 或者轉(zhuǎn)換后 ,不緩存原始圖片

3、 緩存類(lèi)型

活動(dòng)緩存(ActiveResource):存儲(chǔ)正在使用的圖片;

Lru內(nèi)存緩存(LruResourceCache):圖片解析完成后并最近被加載過(guò)會(huì)放到內(nèi)存中;

磁盤(pán)緩存-資源類(lèi)型(DiskCache - Resource):被解碼后的圖片寫(xiě)入磁盤(pán)文件中;

磁盤(pán)緩存-原始數(shù)據(jù)(DiskCache - Data):網(wǎng)絡(luò)請(qǐng)求成功或在本地獲取成功后,將原始數(shù)據(jù)在磁盤(pán)中緩存;

Lru(Least Recently Used):最近最少使用,它的核心思想是,當(dāng)緩存滿的時(shí)候,會(huì)優(yōu)先淘汰最近最少使用的緩存對(duì)象。

4、內(nèi)存緩存/運(yùn)行時(shí)緩存

內(nèi)存緩存/運(yùn)行時(shí)緩存分為兩部分:活動(dòng)緩存(ActiveResource)和Lru內(nèi)存緩存(LruResourceCache)。

LinkedHashMap繼承自HashMap,在此基礎(chǔ)上增加了雙向鏈表的結(jié)構(gòu),每次訪問(wèn)數(shù)據(jù)的時(shí)候,會(huì)更新被訪問(wèn)的數(shù)據(jù)的鏈表指針。比如說(shuō)從鏈表中刪除并不是真正的刪除數(shù)據(jù),只是移動(dòng)了鏈表的指針。

Lru內(nèi)存緩存:使用LinkedHashMap來(lái)緩存資源(強(qiáng)引用),并設(shè)定一個(gè)緩存的大小。如果有資源被訪問(wèn)到,首先會(huì)在鏈表中刪除該節(jié)點(diǎn),然后再添加到鏈表頭,這樣就可以保證鏈表頭部的節(jié)點(diǎn)是最近訪問(wèn)過(guò)的。而當(dāng)緩存的數(shù)量達(dá)最大值的時(shí)候,就會(huì)將鏈表尾部(最近最少使用)的數(shù)據(jù)移除。

但是這樣做有一個(gè)風(fēng)險(xiǎn),就是容易將正在使用的資源回收掉。

Glide這樣設(shè)計(jì):從內(nèi)存緩存(LruResourceCache)中拿到資源時(shí)候就主動(dòng)添加到活動(dòng)緩存(ActiveResource)中,并清理Lru內(nèi)存緩存(LruResourceCache)中的資源,這樣做的好處就是是保護(hù)正在使用資源不被Lru算法回收掉。

ActiveResources是一個(gè)弱引用的HashMap,用來(lái)緩存正在使用的圖片,保存這個(gè)圖片不會(huì)被Lru算法回收掉。圖片用完之后會(huì)重新添加到Lru內(nèi)存緩存中。

ActiveResources和LruResourceCache是內(nèi)存緩存,屬于運(yùn)行時(shí)緩存且互斥(同一張圖片不會(huì)同時(shí)緩存在ActiveResources和LruResourceCache中),應(yīng)用被殺死后內(nèi)存緩存將不存在。

5、 磁盤(pán)緩存

磁盤(pán)緩存策略:

DiskCacheStrategy.NONE:表示不緩存任何內(nèi)容;

DiskCacheStrategy.RESOURCE:在資源解碼后將數(shù)據(jù)寫(xiě)入磁盤(pán)緩存,即經(jīng)過(guò)縮放等轉(zhuǎn)換后的圖片資源;

DiskCacheStrategy.DATA:在資源解碼前將原始數(shù)據(jù)寫(xiě)入磁盤(pán)緩存;

DiskCacheStrategy.ALL :使用DATA和RESOURCE緩存數(shù)據(jù);

DiskCacheStrategy.AUTOMATIC:它會(huì)嘗試對(duì)本地和遠(yuǎn)程圖片使用最佳的策略。當(dāng)加載遠(yuǎn)程數(shù)據(jù)時(shí),AUTOMATIC 策略僅會(huì)存儲(chǔ)未被加載過(guò)程修改過(guò)的原始數(shù)據(jù),因?yàn)橄螺d遠(yuǎn)程數(shù)據(jù)相比調(diào)整磁盤(pán)上已經(jīng)存在的數(shù)據(jù)要昂貴得多。對(duì)于本地?cái)?shù)據(jù),AUTOMATIC 策略則會(huì)僅存儲(chǔ)變換過(guò)的縮略圖,因?yàn)榧词剐枰俅紊闪硪粋€(gè)尺寸或類(lèi)型的圖片,取回原始數(shù)據(jù)也很容易。默認(rèn)使用這種緩存策略;

在使用Glide去加載一張圖片的時(shí)候,Glide默認(rèn)不會(huì)將原始圖片展示出來(lái),而是會(huì)對(duì)圖片進(jìn)行壓縮和轉(zhuǎn)換。我們既可以緩存轉(zhuǎn)換過(guò)的圖片,也可以緩存轉(zhuǎn)換之前的原始圖片。

采用LRU算法的緩存有兩種:LruCache和DisLruCache,分別用于實(shí)現(xiàn)內(nèi)粗緩存和硬盤(pán)緩存

責(zé)任編輯:武曉燕 來(lái)源: Android開(kāi)發(fā)編程
相關(guān)推薦

2021-09-01 06:48:16

AndroidGlide緩存

2022-10-20 18:00:00

MyBatis緩存類(lèi)型

2023-05-12 11:52:21

緩存場(chǎng)景性能

2021-12-11 19:00:54

Java中斷機(jī)制

2022-06-17 07:49:14

緩存LRU

2024-02-27 08:05:32

Flink分區(qū)機(jī)制數(shù)據(jù)傳輸

2009-06-17 15:43:03

Hibernate緩存

2021-09-26 05:06:04

Node.js模塊機(jī)制

2024-06-11 09:22:51

2023-06-26 08:31:59

哈希緩存系統(tǒng)

2020-02-19 19:18:02

緩存查詢速度淘汰算法

2016-11-28 09:00:10

瀏覽器瀏覽器緩存服務(wù)端

2022-05-06 08:26:32

JavaSPI機(jī)制

2010-10-13 16:44:10

MySQL查詢緩存機(jī)制

2009-11-09 17:55:13

WCF緩存

2016-03-09 09:54:47

Python開(kāi)發(fā)緩存機(jī)制

2025-01-02 14:50:34

MyBatis開(kāi)發(fā)緩存

2025-03-27 02:00:00

SPIJava接口

2019-07-21 09:17:11

數(shù)據(jù)緩存架構(gòu)

2021-12-30 22:50:32

KafkaConsumer 源碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)