安卓簡單技術-內存泄漏(OOM)

什麼是OOM,如何避免
    OOM:Out Of Memory,內存泄漏
    可以從四個方面來避免OOM:首先是減小對象的內存佔用,其次是內存對象的重複利用,然後是避免對象的內存泄露,最後是內存使用策略優化。
1)    使用更加輕量的數據結構 例如,我們可以考慮使用ArrayMap/SparseArray而不是HashMap等傳統數據結構
2)    避免在Android裏面使用Enum(枚舉)
3)    減小Bitmap對象的內存佔用 Bitmap是一個極容易消耗內存的類型,注意臨時Bitmap對象的及時回收。
4)    使用更小的圖片。在設計給到資源圖片的時候,我們需要特別留意這張圖片是否存在可以壓縮的空間,是否可以使用一張更小的圖片。儘量使用更小的圖片不僅僅可以減少內存的使用,還可以避免出現大量的InflationException。假設有一張很大的圖片被XML文件直接引用,很有可能在初始化視圖的時候就會因爲內存不足而發生InflationException,這個問題的根本原因其實是發生了OOM
5)    注意在ListView/GridView等出現大量重複子組件的視圖裏面對ConvertView的複用
6)    避免在onDraw方法裏面執行對象的創建。類似onDraw等頻繁調用的方法,一定需要注意避免在這裏做創建對象的操作,因爲他會迅速增加內存的使用,而且很容易引起頻繁的gc,甚至是內存抖動。
7)    注意WebView的泄漏
8)    謹慎使用static對象。因爲static的生命週期過長,和應用的進程保持一致,使用不當很可能導致對象泄漏,在Android中應該謹慎使用static對象。
9)    特別留意單例對象中不合理的持有。雖然單例模式簡單實用,提供了很多便利性,但是因爲單例的生命週期和應用保持一致,使用不合理很容易出現持有對象的泄漏。
10)    優化佈局層次,減少內存消耗。越扁平化的視圖佈局,佔用的內存就越少,效率越高。我們需要儘量保證佈局足夠扁平化,當使用系統提供的View無法實現足夠扁平的時候考慮使用自定義View來達到目的。
發佈了22 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章