Android隨筆 記憶體洩漏以及記憶體溢位

2021-09-07 11:44:41 字數 1187 閱讀 7521

記憶體洩漏:memory leak,是指程式在申請記憶體後,無法釋放已申請的記憶體空間,一次記憶體洩漏危害能夠忽略,但記憶體洩漏堆積後果非常嚴重,不管多少記憶體,遲早會被占光。

記憶體溢位:out of memory,是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用,出現out of memory。比方申請了乙個integer,但給它存了long才幹存下的數。那就是記憶體溢位。除此之外,也有一次性申請非常多記憶體。比方說一次建立大的陣列或者是載入乙個大檔案如。非常多時候是的處理不當。

memory leak 會終於導致out of memory!

1。android資料庫查詢時會使用cursor。可是在寫**時。常常會有人忘記呼叫close,或者由於**邏輯問題導致close未被呼叫。

2。i/o資料流操作,讀寫結束後沒有關閉。

3,bitmap使用後未呼叫recycle();

4,呼叫registerreceiver後未呼叫unregisterreceiver().

5,還有種比較隱晦的context洩漏

先讓我門看一下下面**:

private static drawable sbackground;

@override

protected void oncreate(bundle state)

label.setbackgrounddrawable(sbackground);

setcontentview(label);

}

**說明:在這段**中,我們使用乙個static的drawable物件。這通常發生在我們須要常常呼叫乙個drawable。而其載入又比較耗時,不希望每次載入activity都去建立這個drawable的情況。此時。使用static無疑是最快的**編寫方式,可是其也很的糟糕。當乙個drawable被附加到view時,這個view會被設定為這個drawable的callback (通過呼叫drawable.setcallback()實現)。這就意味著。這個drawable擁有乙個textview的引用,而textview又擁有乙個activity的引用。這就會導致activity在銷毀後,記憶體不會被釋放。

一些避免記憶體洩漏的點能夠看看[android隨筆]記憶體優化紀錄篇

1,一次性載入乙個大檔案如,載入大的解決方式[android隨筆]怎樣有效載入顯示

2,使用list view、gridview在乙個螢幕上顯示多張

android記憶體洩漏

參考 什麼是記憶體洩漏 記憶體洩露,簡單的說,就是該被釋放的記憶體沒有被釋放,一直被某個或某些例項所引用但不能被使用,導致gc不能 造成記憶體洩漏。總結的說,可以理解為長生命週期的物件一直持有短生命週期物件的引用,導致短生命週期物件一直被引用而無法被gc 記憶體洩漏是造成oom的主要原因之一,當乙個...

android 記憶體洩漏

1 android效能優化 記憶體洩漏 上 android效能優化 記憶體洩漏 下 1 錯誤的單例模式 public class singleton public static singleton getinstance context context return instance 即使activ...

android記憶體洩漏 1

記憶體洩漏是一種安全機制。是防止記憶體一直被占用的機制。記憶體洩漏,這句話本身就存在著洩漏,誰的記憶體洩漏,洩漏是什麼?無論是執行乙個程序,還是建立乙個物件。都會分配記憶體,記憶體洩漏中的記憶體就是指的這個記憶體。記憶體洩漏的整體意思就是在這個程序中的某個物件的記憶體洩漏了。什麼叫洩漏?洩漏的意思就...