處理Bitmap出現oom的異常

2021-06-28 14:49:44 字數 1509 閱讀 9480

大小:

直接使用imageview顯示bitmap會占用較多資源,特別是較大的時候,可能導致崩潰。

使用bitmapfactory.options設定insamplesize, 這樣做可以減少對系統資源的要求。

屬性值insamplesize表示縮圖大小為原始大小的幾分之一,即如果這個值為2,則取出的縮圖的寬和高都是原始的1/2,大小就為原始大小的1/4。

bitmapfactory.options bitmapfactoryoptions = new bitmapfactory.options();  

bitmapfactoryoptions.injustdecodebounds = true;  

bitmapfactoryoptions.insamplesize = 2;  

// 這裡一定要將其設定回false,因為之前我們將其設定成了true  

// 設定injustdecodebounds為true後,decodefile並不分配空間,即,bitmapfactory解碼出來的bitmap為null,但可計算出原始的長度和寬度  

options.injustdecodebounds = false;  

bitmap bmp = bitmapfactory.decodefile(sourcebitmap, options);  

android中有四種屬性,分別是:

alpha_8:每個畫素占用1byte記憶體

argb_4444:每個畫素占用2byte記憶體

argb_8888:每個畫素占用4byte記憶體 (預設)

rgb_565:每個畫素占用2byte記憶體

android預設的顏色模式為argb_8888,這個顏色模式色彩最細膩,顯示質量最高。但同樣的,占用的記憶體也最大。 所以在對效果不是特別高的情況下使用rgb_565(565沒有透明度屬性),如下:

publicstaticbitmapreadbitmap(contextcontext, intresid)   

**:使用bitmap過後,就需要及時的呼叫bitmap.recycle()方法來釋放bitmap占用的記憶體空間,而不要等android系統來進行釋放。

下面是釋放bitmap的示例**片段。

// 先判斷是否已經**

if(bitmap != null && !bitmap.isrecycled())  

system.gc();  

捕獲異常:

一道最後的關卡——捕獲oom異常:

bitmap bitmap = null;  

try  catch (outofmemoryerror e)   

if (bitmap == null)  

bitmap的處理,盡量避免OOM

bitmap是乙個吃記憶體的大傢伙,如果使用不當,那麼程式就會oom常伴了。因此,這篇文章主要介紹幾個方法來控制好bitmap對記憶體的占用。第一種方法 按比例縮小bitmap private bitmap getbitmap string srcpath else if w h h hh if s...

Bitmap的使用 防止OOM異常

public class mainactivity extends activity override protected void onactivityresult int requestcode,int resultcode,intent data options.injustdecodebou...

HIVE shuffle階段的oom處理方法

工作中碰到的問題,現在記下來以後好找。1.增加reduce數 set mapreduce.job.reduces 或者 set hive.exec.reducers.bytes.per.reducer 150000000 預設是1g 2.或調整放在記憶體裡的最大片段所佔百分比 set mapredu...