Android的OOM

Out Of Menory:內存溢出,主要原因是:我們的一個應用,運行在他自己的虛擬機哪裏,注意,是一個應用一個虛擬機,這樣子的目的是當虛擬機發生崩潰的時候不會使得整個系統都掛掉,我們應該需要的內存系統不足以提供,發生了內存溢出的錯誤。
a,加載對象過大
b,相應資源過多,沒有來不及釋放
他們都是引發OOM的原因
解決方法:
1,管理好我們的bitmap:我對圖片的處理,需要使用一個LRUCache來管理圖片所需要的Bitmap,設置一個運行時內存的四分之一或者是8分之一等,全部的bitmap存放在這個LRUCache,取從這裏取,當超出maxsize的時候,LRUCache會按照最近最少使用來釋放存放的bitmap。注意需要使用單例。同時,我們需要對bitmap進行壓縮,利用 BitmapFactory進行壓縮。
2,一些臨時的bitmap注意recycle掉,當不可預測的時候,使用OutOfMenory來進行try catch,這是一個錯誤不是一個異常。
3,對於自定義的View,使用TypeArray的時候,也需要及時recycle
4,對於adapter,使用Holder去緩存我們的converView
5,有些引用,使用完之後不再使用,就置null
6,對於一些引用,當他的作用範圍在有限的時候,不應該讓他擁有全局的應用,比如Toast,應該有Application的應用
7,對於線程,比如,我們再一個home界面,打開了一個item,這個item進入一個Activity,會去啓動一個Thread去下載新聞,但是,當我們推出了這個Activity,同時我們的新聞這時候還沒有顯示或者下載完畢,我們就應該在destroy的時候,去cancel這個線程。
8,有些引用可以使用weakreference
9,LIstView快速滾動的時候不去加載數據,比如開啓線程下載圖片設置圖片等。
10,查詢數據庫關閉遊標
當出現OOM的時候,通過一些工具去發現是哪裏出現了OOM:
工具MAT ,下面有一些推薦鏈接,有介紹使用MAT的方法


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章