- Fresco是Facebook開源的一個(gè)圖片加載庫(kù)
- 項(xiàng)目地址:Fresco
- 使用簡(jiǎn)單
- 使用教程
- 基于控件級(jí)別的圖片庫(kù)
- 能顯著優(yōu)化APP因圖片過(guò)大而占過(guò)多的內(nèi)存
Fresco的核心技術(shù):
- Fresco的原理是:設(shè)計(jì)一個(gè)ImagePipeline的概念,它負(fù)責(zé)先后檢查內(nèi)存,磁盤文件,如果能夠取出圖片則取用之,反之再去從網(wǎng)絡(luò)下載圖片,并緩存。
- Fresco有三個(gè)線程绽左,其中3個(gè)線程用于從網(wǎng)絡(luò)下載圖片,2兩線程用于磁盤文件的讀寫艇潭,還有2個(gè)線程用于CPU的相關(guān)操作拼窥,比如圖片解碼,轉(zhuǎn)換以及放在后臺(tái)執(zhí)行的一些費(fèi)時(shí)操作蹋凝。
- Fresco的三層緩存技術(shù)是其最核心 的技術(shù)鲁纠,它比其他圖片SDK吃內(nèi)存小,也正是得利于這個(gè)全新的緩存設(shè)計(jì)鳍寂。
- 第一層:Bitmap緩存
- 在Android5.0系統(tǒng)中改含,考慮到內(nèi)存管理有了很大改進(jìn),所以Bitmap緩存位于Java堆(heap)中迄汛。
- 而在Android4.X和更低的系統(tǒng)中捍壤,Bitmap緩存位于ashmem中,而不是位于Java的堆中鞍爱,這意味著圖片的創(chuàng)建和回收不會(huì)引發(fā)過(guò)多的GC鹃觉,從而讓APP運(yùn)行的更快。
- 當(dāng)APP切換到后臺(tái)時(shí)睹逃,Bitmap緩存會(huì)被清空盗扇。
- 第二層內(nèi)存緩存
- 內(nèi)存緩存中存儲(chǔ)了圖片的原始?jí)嚎s格式。從內(nèi)存緩存中取出的圖片,在顯示前必須先解碼疗隶。
- 當(dāng)APP切換到后臺(tái)后躬柬,內(nèi)存緩存也被清空。
- 第三層: 磁盤緩存
- 磁盤緩存也稱為本地緩存抽减。
- 磁盤緩存中存儲(chǔ)的圖片也是原始?jí)嚎s格式,在使用時(shí)需先解碼橄碾。
- 當(dāng)APP切換到后臺(tái)時(shí)卵沉,磁盤緩存不會(huì)丟失,即使關(guān)機(jī)也不會(huì)丟失法牲。