自動釋放內存!非死book推出強大Android圖片庫Fresco
快速而又高效的顯示圖片對 Android 設備來說是件極其重要的事情,但在過去的幾年里,在有效存儲圖像方面我們面臨了很多問題。圖片太大,而手機又只有很小的內存,特別是 Android 設備還要將內存分割給各個應用。所以,太多的圖片總會耗去大部分的內存,從而導致應用的崩潰。
為了解決這一問題,非死book 最近推出了一款用于 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 圖像,只不過不是全部支持。
傳送門:Fresco 官網、Github 托管地址