Android Bitmap OutOfMemory 解决办法
Android Bitmap OutOfMemory 解決辦法
置頂?2014年07月01日 14:41:22?閱讀數:3072?標簽:?OutOfMemoryBitmapandroid圖片優化更多
個人分類:?異常問題和解決辦法
??????在Android應用里,最耗費內存的就是圖片資源。而且在Android系統中,讀取位圖Bitmap時,分給虛擬機中的圖片的堆棧大小只有8M,如果超出了,就會出現OutOfMemory異常
E/AndroidRuntime(? 697): java.lang.OutOfMemoryError
E/AndroidRuntime(? 697): ?? ?at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
E/AndroidRuntime(? 697): ?? ?at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:500)
E/AndroidRuntime(? 697): ?? ?at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:353)
E/AndroidRuntime(? 697): ?? ?at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:376)
E/AndroidRuntime(? 697): ?? ?at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:406)
E/AndroidRuntime(? 697): ?? ?at com.example.imagetoshow2.ImageAdapter.createReflectedImages(ImageAdapter.java:66)
E/AndroidRuntime(? 697): ?? ?at com.example.imagetoshow2.ImageAdapter.getView(ImageAdapter.java:54)
E/AndroidRuntime(? 697): ?? ?at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:193)
解決辦法:
1.及時回收內存
?if(bitmap != null && !bitmap.isRecycled()){
// 回收并且置為null
bitmap.recycle();
bitmap = null;
}
System.gc();
在適當的地方使用上述代碼,將暫時不需使用的的回收掉,當然system.gc不應該頻繁調用,否則會使系統效率降低。
?
?
2.使用BitmapFactory.Options對圖片進行壓縮
?
?BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = n;
bitmap = BitmapFactory.decodeStream(fis, null, opts);
使用inSampleSize設置放縮比例,默認值為0,設置一個大于0的數便可對圖片進行壓縮。
?
?
?BitmapFactory.Options opts = new BitmapFactory.Options();
// 設置inJustDecodeBounds為true
opts.inJustDecodeBounds = true;
// 使用decodeFile方法得到圖片的寬和高
BitmapFactory.decodeFile(path, opts);
使inJustDecodeBounds為true后,再使用decodeFile()等方法,并不會真正的分配空間,即解碼出來的Bitmap為null,只會計算出options.outWidth和options.outHeight值,在下次使用BitmapFactory的decodeFile()等方法實例化Bitmap對象前,將opts.inJustDecodeBound設置回false就可以得到圖片了。
?
3.代碼優化
為了避免應用在分配Bitmap內存的時候出現OutOfMemory異常停止運行,通常,在實例化Bitmap的代碼中,對OutOfMemory異常進行捕獲
?<span style="font-size:18px;"> <span style="font-size:18px;">Bitmap bitmap = null;
try {
// 實例化Bitmap
bitmap = BitmapFactory.decodeFile(path);
} catch (OutOfMemoryError e) {
//
}</span></span>
然后在Catch部分做一些內存回收操作,或者是使用緩存圖片等...
總是良好的編程風格和優質的代碼結構是程序員的無上追求....
?
?
https://blog.csdn.net/tangnengwu/article/details/36185361
https://blog.csdn.net/zhuwentao2150/article/details/52097344
總結
以上是生活随笔為你收集整理的Android Bitmap OutOfMemory 解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux显示中文乱码(linux 显示
- 下一篇: 换印章备案表怎么弄(换印章备案表)