2012-08-25 31 views
2

我有這個函數從SD加載一個大的位圖並旋轉它。如何回收位圖? - 位圖大小超過虛擬機預算

第二次或第三次旋轉後,我得到一個位圖大小超過虛擬機預算錯誤。

任何想法,爲什麼?我回收舊的位圖,不是嗎?

public void next(String s, int d) 
{ 

if (mBitmap!=null) { mBitmap.recycle(); } 

deg = deg + d; 
mBitmap = BitmapFactory.decodeFile(s); 

Matrix matrix = new Matrix(); 
matrix.postRotate(deg); 
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth() , mBitmap.getHeight(), matrix, true); 

謝謝!

+0

這將幫助您: http://stackoverflow.com/questions/3823799/android-bitmap-recycle-how-does-it-work – sromku

回答

2

當你不正常使用位圖時,這種情況並不少見。

位圖佔用大量內存,特別是對於像照片這樣的豐富圖像。例如,Galaxy Nexus上的相機拍攝高達2592x1936像素(500萬像素)的照片。如果使用的位圖配置是ARGB_8888(Android 2.3以後的默認設置),則將該圖像加載到內存中需要大約19MB的內存(2592 * 1936 * 4字節),立即耗盡了某些設備上的每應用程序限制。

上有 how to use Bitmaps efficiently.

一個偉大的Android指南操作指導,你應該能夠用出丟失任何明顯的質量大大降低內存消耗,避免了不必要的崩潰。

1

代碼看起來不錯。

但是,此異常還取決於位圖(分辨率和位圖格式)和其他內存消耗對象的大小。

相關問題