轉載聲明:Ryan的博客文章歡迎您的轉載,但在轉載的同時,請註明文章的來源出處,不勝感激! :-) html
http://my.oschina.net/ryanhoo/blog/88153
java
譯者:Ryan Hoo android
來源:https://developer.android.com/develop/index.html
緩存
譯者按: 在Google最新的文檔中,提供了一系列含金量至關高的教程。由於種種緣由而不爲人知,真是惋惜!Ryan將會細心整理,將之翻譯成中文,但願對開發者有所幫助。 併發
本系列是Google關於展現大Bitmap(位圖)的官方演示,能夠有效的解決內存限制,更加有效的加載並顯示圖片,同時避免讓人頭疼的OOM(Out Of Memory)。
性能
------------------------------------------------------------------------------------- 學習
譯文: 優化
這一系列教程覆蓋了一些用於處理和加載Bitmap(位圖)對象的經常使用技術,在某種程度上,使用這些技術可使你的用戶接口(UI)組件保持良好的響應性能,而且避免超出程序內存限制。若是你不當心翼翼,這些位圖對象能夠迅速消耗你的可用內存,並引發嚴重的錯誤而致使程序崩潰: spa
java.lang.OutofMemoryError: bitmap size exceeds VM budget. .net
這裏有一堆的緣由向你解釋爲何在Android應用中加載Bitmap會如此棘手:
· 移動設備通常只有有限的系統資源。Android設備爲單個應用分配的可用內存僅爲16M。在Android兼容性說明文檔(Android Compatibility Definition Document(CDD))的3.7章————虛擬設備的兼容性中,給出了不一樣屏幕尺寸和密度的手機所須要的最小內存。在有着最小內存限制條件下,應用應該對性能進行優化處理。可是請記住,不少設備的配置要高於這個限制。
· Bitmap(位圖)尤爲是一些像照片這種豐富的圖片,須要佔用大量的內存。例如,Galaxy Nexus攝像頭拍攝的照片爲2592*1936px(5百萬像素)。若是使用ARGB_8888(Android2.3以前的默認配置)加載該位圖,須要佔用19M的內存(2592*1936*4),立馬將一些設備的單個應用內存消耗一空。要解決這些問題,你須要學習以下課程:
-------------------------------------------------------------------------------------
第一課:高效地加載大Bitmap
這節課將帶你貫穿各類以不超過應用的內存限制的方式解碼大Bitmap。
第二課:在非UI線程中處理Bitmap
Bitmap處理(改變圖片尺寸,遠程下載等等)不該該在UI線程中進行。這節課將帶你學習使用AsyncTask在後臺線程進行圖片處理而且闡述如何處理併發問題。
第三課:緩存Bitmap
這節課將教會你使用內存和硬盤兩種方式緩存Bitmap來提高在加載多個Bitmap時UI的響應性和流暢性。
第四課:在你的UI中顯示Bitmap
這節課將全部東西綜合起來,向你展現如何使用後臺線程和Bitmap緩存,加載多個Bitmap到ViewPager和GridView這樣的組件中去。