Android 優化Bitmap避免OOM

2021-07-10 12:05:12 字數 982 閱讀 5244

使用android提供的bitmapfactory解碼時,往往會因為過大而遇到

outofmemoryerror的異常。

要想正常使用,一種簡便的方式是分配更少的記憶體空間來儲存,即在載入的時候以犧牲質量為代價,將進行放縮,這是一種避免oom所採用的解決方法。但是,這種方法是得不償失的,

犧牲了質量。

在bitmapfactory中有乙個內部類

bitmapfactory.options,其中值得我們注意的是

insamplesize和

injustdecodebounds兩個屬性:

insamplesize是以2的指數的倒數被進行放縮

injustdecodebounds為boolean型

設定injustdecodebounds為true後,decodefile並不分配空間,但可計算出原始的長度和寬度,即options.outwidth和options.outheight。

要對進行縮放,最大的問題就是怎麼在執行時動態的改變insamplesize的值,通過上面的

injustdecodebounds可以知道原始的大小,那麼這樣以來就可以通過演算法來得到乙個

恰當的insamplesize值。其動態演算法可參考下面的,網上也很多,大體都一樣:

有了上面的演算法,我們就可以輕易的get到bitmap了:

/*** get bitmap

* * @param imgfile

* @param minsidelength

* @param maxnumofpixels

* @return

*/public static bitmap trygetbitmap(string imgfile, int minsidelength,

int maxnumofpixels) catch (outofmemoryerror err)

} catch (exception e)

}

android記憶體優化 Bitmap

眾說周知在android開發中bitmap是吃記憶體的大戶,所以談到android記憶體優化首先得對bitmap進行優化 優化方法主要有 1 對於無用的bitmap要及時進行 釋放bitmap的方法 if bitmap null bitmap.isrecycled bitmap.recycle 方法...

Bitmap效能優化問題

倒影的 public static bitmap createreflectionimagewithorigin bitmap bitmap 縮放問題 public static drawable zoomdrawable drawable drawable,int w,int h 縮放方法二 im...

記bitmap記憶體優化

減小bitmap佔記憶體大小的方案有兩種 1,options.insamplesize 設定取樣率的值,原理是等比縮放寬高。縮放多少倍bitmap的記憶體大小占用久縮放多少倍。2.options.inpreferredconfig bitmap.config.rgb 565 設定位深,也可以說是設定...