首先OOM是什么?
當(dāng)程序需要申請一段“大”內(nèi)存,但是虛擬機(jī)沒有辦法及時的給到,即使做了GC操作以后,這就會拋出 OutOfMemoryException 也就是OOM
如何避免OOM
減少內(nèi)存對象的占用
I.ArrayMap/SparseArray代替hashmap
II.避免在android里面使用Enum
III.減少bitmap的內(nèi)存占用;
inSampleSize:縮放比例,在把圖片載入內(nèi)存之前,我們需要先計算出一個合適的縮放比例,避免不必要的大圖載入。
decode format:解碼格式,選擇ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差異。
IV.減少資源圖片的大小,過大的圖片可以考慮分段加載;在安卓開發(fā)中在保證不失真的情況下,使用內(nèi)存較小的圖片(.png和.jpg類型的圖片可以通過這個網(wǎng)站:https://tinypng.com/進(jìn)行壓縮,減少內(nèi)存占用);
內(nèi)存對象的重復(fù)利用
大多數(shù)對象的復(fù)用,都是利用對象池的技術(shù)。(關(guān)于對象池的介紹可以草考這篇文章:http://blog.csdn.net/self_study/article/details/51477002)
I.listview/gridview/recycleview contentview的復(fù)用
II.inBitmap 屬性對于內(nèi)存對象的復(fù)用ARGB_8888/RBG_565/ARGB_4444/ALPHA_8
這個方法在某些條件下非常有用,比如要加載上千張圖片的時候。
III.避免在ondraw方法里面 new對象
IV.StringBuilder 代替+