摘要:Fresco是Facebook新推出的一款用于Android應用中展示圖片的強大圖片庫,可以從網絡、本地存儲和本地資源中加載圖片。其中的Drawees可以顯示占位符,直到圖片加載完成。而當圖片從屏幕上消失時,會自動釋放內存。
快速而又高效的顯示圖片對Android設備來說是件極其重要的事情,但在過去的幾年里,在有效存儲圖像方面我們面臨了很多問題。圖片太大,而手機又只有很小的內存,特別是Android設備還要將內存分割給各個應用。所以,太多的圖片總會耗去大部分的內存,從而導致應用的崩潰。
為了解決這一問題,Facebook近推出了一款用于Android應用中展示圖片的強大圖片庫Fresco,它能夠從網絡、本地存儲和本地資源中加載圖片。而且,為了節省數據和CPU,它擁有三級緩存。此外,Fresco在顯示方面是用了Drawees,可以顯示占位符,直到圖片加載完成。而當圖片從屏幕上消失時,會自動釋放圖片所占的內存。Fresco支持Android 2.3及以上版本,目前已托管至Github上。
主要特性:
內存
解壓后的圖片和Android的位圖都會占據很大的內存,這導致Java 垃圾收集器更頻繁的運行,也讓應用變得更加緩慢,這一問題在沒有對垃圾收集器進行完善的Android 5.0上尤為嚴重。
在Android 4.x及以下版本,Fresco將圖片放置在Android內存的一個特殊位置。這可以確保當圖像不在屏幕上顯示時,可以自動釋放它們所占的內存。讓應用運行的更快速,且不易崩潰。
使用Fresco的應用,即使在配置低端的設備上也能正常運行,而且你無需經常性地去擔心圖片的內存占用情況。
Streaming
Web上的漸進式(Progressive)JPEG圖片已經存在多年,打開文件過程中,會先顯示整個圖片的模糊輪廓,隨著掃描次數的增加,圖片變得越來越清晰。這種格式可以說是網絡較慢情況下的救星,通過圖片的輪廓知道正在加載的圖片大概是什么。
Android自己的圖片庫不支持streaming,而Fresco可以,只需指定一個URI,你的應用程序就可以隨著數據的到來,自動更新它的顯示。
動畫
動畫GIF和WebP應該是應用的難點,每一幀都是一個大型的位圖,而每個動畫都是一系列的幀。Fresco則負責加載和處理這些幀及管理它們的內存。
Drawing
Fresco在顯示方面使用了Drawees,Fresco的Drawees能夠顯示占位符,直到圖片已加載,并自動顯示到圖像到達時:
將圖片擴展至自定義的焦點,而不是作為處理的中心。
使用圓角化或圓形來顯示圖像。
如果網絡加載失敗的話,用戶可以點擊占位符重新加載圖像。
顯示自定義背景、浮窗小部件(overlays)或圖像上的進度條。
當用戶點擊圖片,自定義浮窗小部件。
加載
Fresco的圖像管道可以讓你以多種方法來自定義加載:
為一個圖像指定不同的URI,從中選取一個已經緩存的顯示。
優先顯示低分辨率圖像,待數據到達后交換到高的分辨率。
如果圖像有EXIF縮略圖,首先顯示縮略圖,直到整個圖片被加載出來(只針對本地圖片)。
調整或旋轉圖像。
即使是在老版的Android上也可以解碼WebP圖像,只不過不是全部支持。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。