當我們在做項目過程中,一遇到顯示圖片時,就要考慮圖片的大小,所占內存的大小,原因就是Android分配給Bitmap的大小只有8M,試想想我們用手機拍照,普通的一張照片不也得1M以上,所以android處理圖片時不得不考慮圖片過大造成的內存異常。
方法一:
在從網絡或本地加載圖片的時候,只加載縮略圖。
這個方法的確能夠少占用不少內存,可是它的致命的缺點就是,因為加載的是縮略圖,所以圖片失真比較嚴重,對於對圖片質量要求很高的應用,可以采用下面的方法。
方法二:
運用JAVA的軟引用,進行圖片緩存,將經常需要加載的圖片,存放在緩存里,避免反復加載。
方法三:
及時銷毀不再使用的Bitmap對象。
if (bitmap != null && b!itmap.isRecycled()){
bitmap.recycle();
bitmap = null; // recycle()是個比較漫長的過程,設為null,然后在最后調用System.gc(),效果能好很多
}
System.gc();
方案四:
讀取圖片時注意方法的調用,適當壓縮
盡量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource來設置一張大圖,因為這些函數在完成decode后,最終都是通過java層的createBitmap來完成的,需要消耗更多內存。 因此,改用先通過BitmapFactory.decodeStream方法,創建出一個bitmap,再將其設為ImageView的 source,decodeStream最大的秘密在於其直接調用JNI>>nativeDecodeAsset()來完成decode,無需再使用java層的createBitmap,從而節省了java層的空間