Android OOM出現(xiàn)常見原因及解決辦法

首先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 代替+

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容