我使用下面的代碼將圖像加載到ListActivity中的行。加載圖像拋出OutOfMemoryException
URL url = new URL(drink.getImageUri());
InputStream fis = url.openStream();
//Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(fis, null, o);
int scale = 1;
if (o.outHeight > imageMaxSize || o.outWidth > imageMaxSize) {
scale = (int) Math.pow(2, (int) Math.round(Math.log((imageMaxSize/(double) Math.max(o.outHeight, o.outWidth))/Math.log(0.5))));
}
fis.close();
fis = url.openStream();
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
bitmap = BitmapFactory.decodeStream(fis, null, o2);
fis.close();
imageMaxSize是screenHeight/7,所以每個圖像應該相當小。
我在上面的代碼中做了什麼錯誤嗎?我得到的所有錯誤都在第二行,我試圖實際加載位圖。
在此先感謝 羅蘭
羅蘭,如果你增加`scale`的值試試2,4,8,16這個問題是否會消失? – 2011-02-10 20:37:44
您是否嘗試過在第一張圖片上調用Bitmap.recycle()以確保它不存儲原始圖片和縮放圖片? – Cameron 2011-02-10 21:06:28