成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊Glide緩存機制

存儲 存儲架構
內存緩存/運行時緩存分為兩部分:活動緩存(ActiveResource)和Lru內存緩存(LruResourceCache)。

緩存機制簡介

1、緩存的圖片資源

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

轉換后的圖片(Result) :經過尺寸縮放和大小壓縮等處理后的圖片;

當使用Glide加載圖片時,Glide會默認根據(jù)View視圖對圖片進行壓縮和轉換,而不顯示原始圖。(這也是Glide加載速度高于Picasso的原因)

2、緩存機制設計

Glide的緩存功能設計成二級緩存:內存緩存和硬盤緩存。(從網(wǎng)絡加載不屬于緩存)

內存緩存:防止重復將圖片讀入到內存,造成內存資源浪費,只緩存轉換后的圖片,而不是原始圖片;

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

在Glide中,緩存的讀取順序為:內存緩存 –> 磁盤緩存 –> 網(wǎng)絡 ,內存緩存和磁盤緩存相互不影響,獨立配置,內存緩存是默認開啟的。

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

以下是Glide的相關代碼:

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

3、 緩存類型

活動緩存(ActiveResource):存儲正在使用的圖片;

Lru內存緩存(LruResourceCache):圖片解析完成后并最近被加載過會放到內存中;

磁盤緩存-資源類型(DiskCache - Resource):被解碼后的圖片寫入磁盤文件中;

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

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

4、內存緩存/運行時緩存

內存緩存/運行時緩存分為兩部分:活動緩存(ActiveResource)和Lru內存緩存(LruResourceCache)。

LinkedHashMap繼承自HashMap,在此基礎上增加了雙向鏈表的結構,每次訪問數(shù)據(jù)的時候,會更新被訪問的數(shù)據(jù)的鏈表指針。比如說從鏈表中刪除并不是真正的刪除數(shù)據(jù),只是移動了鏈表的指針。

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

但是這樣做有一個風險,就是容易將正在使用的資源回收掉。

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

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

ActiveResources和LruResourceCache是內存緩存,屬于運行時緩存且互斥(同一張圖片不會同時緩存在ActiveResources和LruResourceCache中),應用被殺死后內存緩存將不存在。

5、 磁盤緩存

磁盤緩存策略:

DiskCacheStrategy.NONE:表示不緩存任何內容;

DiskCacheStrategy.RESOURCE:在資源解碼后將數(shù)據(jù)寫入磁盤緩存,即經過縮放等轉換后的圖片資源;

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

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

DiskCacheStrategy.AUTOMATIC:它會嘗試對本地和遠程圖片使用最佳的策略。當加載遠程數(shù)據(jù)時,AUTOMATIC 策略僅會存儲未被加載過程修改過的原始數(shù)據(jù),因為下載遠程數(shù)據(jù)相比調整磁盤上已經存在的數(shù)據(jù)要昂貴得多。對于本地數(shù)據(jù),AUTOMATIC 策略則會僅存儲變換過的縮略圖,因為即使需要再次生成另一個尺寸或類型的圖片,取回原始數(shù)據(jù)也很容易。默認使用這種緩存策略;

在使用Glide去加載一張圖片的時候,Glide默認不會將原始圖片展示出來,而是會對圖片進行壓縮和轉換。我們既可以緩存轉換過的圖片,也可以緩存轉換之前的原始圖片。

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

責任編輯:武曉燕 來源: Android開發(fā)編程
相關推薦

2021-09-01 06:48:16

AndroidGlide緩存

2022-10-20 18:00:00

MyBatis緩存類型

2023-05-12 11:52:21

緩存場景性能

2021-12-11 19:00:54

Java中斷機制

2022-06-17 07:49:14

緩存LRU

2024-02-27 08:05:32

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

2009-06-17 15:43:03

Hibernate緩存

2021-09-26 05:06:04

Node.js模塊機制

2024-06-11 09:22:51

2023-06-26 08:31:59

哈希緩存系統(tǒng)

2016-11-28 09:00:10

瀏覽器瀏覽器緩存服務端

2020-02-19 19:18:02

緩存查詢速度淘汰算法

2022-05-06 08:26:32

JavaSPI機制

2009-11-09 17:55:13

WCF緩存

2010-10-13 16:44:10

MySQL查詢緩存機制

2016-03-09 09:54:47

Python開發(fā)緩存機制

2025-01-02 14:50:34

MyBatis開發(fā)緩存

2025-03-27 02:00:00

SPIJava接口

2022-03-11 20:46:01

機制命令kerberos

2021-12-30 22:50:32

KafkaConsumer 源碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人免费视频网站视频社区 | 欧美日韩免费一区二区三区 | 狠狠干网站 | 亚洲一区 中文字幕 | 久久成人一区 | 国产高清视频一区 | 99久久精品免费看国产四区 | 国产欧美性成人精品午夜 | 一级黄色录像毛片 | 国产中文字幕网 | 人人操日日干 | 欧美日韩国产一区二区三区不卡 | 日韩在线观看中文字幕 | 成人av播放 | 国产午夜亚洲精品不卡 | 日韩综合一区 | 91欧美精品成人综合在线观看 | 欧美成人激情视频 | 亚洲成人高清 | 国产电影一区 | 亚洲成av | 久久综合久色欧美综合狠狠 | 久久一二 | 亚洲成人一区二区 | 国产黑丝在线 | 成人影院免费视频 | 亚洲视频在线一区 | 国产精品毛片无码 | 日韩欧美天堂 | 91看片在线 | 一区亚洲| 久久久国产视频 | 一级免费a | 国产成人精品免费视频大全最热 | 波霸ol一区二区 | 国产精品a免费一区久久电影 | 在线精品一区二区 | 一级黄色播放 | 欧美国产精品一区二区 | 99久久婷婷 | 成人午夜视频在线观看 |