今天遇到這個問題就是從一個輸入流裏調用BitmapFactory.decodeFile(name)得到一個bitmap報的錯。第一次調用都沒問題,第二次再次調用就會報上面那個內存溢出的問題。而且有的手機報有的手機不報。研究了半天終於解決。首先分析了下原因,應該是圖片佔用的內存超過了系統虛擬機可分配的最大限制。不同手機可能分配的最大值不一樣。後來找到解決辦法主要是設置BitmapFactory.Options。
BitmapFactory.Options option = new BitmapFactory.Options(); option.inSampleSize = 4; try { Bitmap bmp = BitmapFactory.decodeFile(Path,option); holder.icon.setImageBitmap(bmp); } catch (OutOfMemoryError err) {}
有的說要加上bitmapOptions.inJustDecodeBounds = true;但是我加上後得到的bitmap就爲null。去掉之後就可以。按照上面的方法就解決問題了。最好把bitmap在不用的時候回收一下:
if (bitmap != null && !bitmap.isRecycled())
bitmap.recycle();