標籤:android 文檔 圖片 facebook 緩衝
自動釋放記憶體!Facebook推出強大Android圖片庫Fresco
快速而又高效的顯示圖片對Android裝置來說是件極其重要的事情,但在過去的幾年裡,在有效儲存映像方面我們面臨了很多問題。圖片太大,而手機又只有很小的記憶體,特別是Android裝置還要將記憶體分割給各個應用。所以,太多的圖片總會耗去大部分的記憶體,從而導致應用的崩潰。
為瞭解決這一問題,Facebook最近推出了一款用於Android應用中展示圖片的強大圖片庫Fresco,它能夠從網路、本機存放區和本地資源中載入圖片。而且,為了節省資料和CPU,它擁有三級緩衝。此外,Fresco在顯示方面是用了Drawees,可以顯示預留位置,直到圖片載入完成。而當圖片從螢幕上消失時,會自動釋放圖片所佔的記憶體。Fresco支援Android 2.3及以上版本,目前已託管至Github上。
主要特性:
解壓後的圖片和Android的位元影像都會佔據很大的記憶體,這導致Java 垃圾收集器更頻繁的運行,也讓應用變得更加緩慢,這一問題在沒有對垃圾收集器進行完善的Android 5.0上尤為嚴重。
在Android 4.x及以下版本,Fresco將圖片放置在Android記憶體的一個特殊位置。這可以確保當映像不在螢幕上顯示時,可以自動釋放它們所佔的記憶體。讓應用啟動並執行更快速,且不易崩潰。
使用Fresco的應用,即使在配置低端的裝置上也能正常運行,而且你無需經常性地去擔心圖片的記憶體佔用情況。
Web上的漸進式(Progressive)JPEG圖片已經存在多年,開啟檔案過程中,會先顯示整個圖片的模糊輪廓,隨著掃描次數的增加,圖片變得越來越清晰。這種格式可以說是網路較慢情況下的救星,通過圖片的輪廓知道正在載入的圖片大概是什麼。
Android自己的圖片庫不支援streaming,而Fresco可以,只需指定一個URI,你的應用程式就可以隨著資料的到來,自動更新它的顯示。
動畫GIF和WebP應該是應用的痛點,每一幀都是一個大型的位元影像,而每個動畫都是一系列的幀。Fresco則負責載入和處理這些幀及管理它們的記憶體。
Fresco在顯示方面使用了Drawees,Fresco的Drawees能夠顯示預留位置,直到圖片已載入,並自動顯示到映像到達時:
- 將圖片擴充至自訂的焦點,而不是作為處理的中心。
- 使用圓角化或圓形來顯示映像。
- 如果網路載入失敗的話,使用者可以點擊預留位置重新載入映像。
- 顯示自訂背景、浮窗小組件(overlays)或映像上的進度條。
- 當使用者點擊圖片,自訂浮窗小組件。
Fresco的映像管道可以讓你以多種方法來自訂載入:
- 為一個映像指定不同的URI,從中選取一個已經緩衝的顯示。
- 優先顯示低解析度映像,待資料到達後交換到高的解析度。
- 如果映像有EXIF縮圖,首先顯示縮圖,直到整個圖片被載入出來(只針對本地圖片)。
- 調整或旋轉映像。
- 即使是在老版的Android上也可以解碼WebP映像,只不過不是全部支援。
github: https://github.com/facebook/fresco
api: http://fresco-cn.org/
Facebook推出強大Android圖片庫Fresco 自動釋放記憶體 圖片緩衝 記憶體益處