大小:
直接使用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...