Android效能優化篇 二 ,記憶體洩露的舉例分析

2021-07-24 10:47:08 字數 1452 閱讀 9106

由於我能力有限,所以不敢稱這是部落格(部落格一般都具有分享性),這只是筆記,所以在寫的過程中我也會盡量描述的清楚些,希望對你有所幫助。當做個人歷程而已。

記憶體洩露的根本原因:生命週期長的持有了生命周期短的引用。下面就介紹下,我們平時開發中常見的洩露例子。

補充上篇知識:記憶體洩露是說,本該被gc**的記憶體缺**不了。而記憶體溢位是說,記憶體不夠,比如bitmap太大了,或者記憶體洩露的太多了,導致記憶體不足。

public class commutil 

public static commutil getinstance(context context)

}return instance;}}

這是個典型的單例,在mainactivity中呼叫getinstatance(this),就會產生記憶體洩露。

自定義view中存在乙個監聽,這個在開發中也是非常常見的

首先建立乙個集合類,weakhashmap這是個集合弱引用,當key為null時,就會釋放value

weakhashmap
public class listenercollector }

在看下view類:在初始化的時候就把listener傳進,因為比如像onclicklistener也是在初始化就有了 

public class myview extends view

public inte***ce mylistener

private void init()

private mylistener mylistener = new mylistener() };}

然後在mainactivity中呼叫這個方法:

myview myview = new myview(this);

setcontentview(myview);

洩露分析:執行程式,呼叫init(),就把view和listener放在集合裡,退出activity,由於集合是static的,所以裡面還會持有view的引用

解決方案:在listenercollector類中,新增乙個靜態方法,然後在activity的destroy()方法中呼叫即可,**如下

第乙個:這個例項的總個數,第二個,例項在堆記憶體中的總個數,第三個,乙個例項做占用的大小,第四個,這個例項的全部占用的總大小,第五個,gc乾掉這個例項所釋放的記憶體,為什麼都要比shallow大呢,因為乙個例項也要可能被其他例項引用。

Android效能優化 記憶體優化

記憶體優化 下面介紹一下常用的一些記憶體優化的方法 從慕課網學來的 資料結果優化 1,如果經常使用字串拼接的話,要用stringbuilder,避免直接使用使用 的方式 2,使用arraymap,sparsearray代替hashmap 3,避免記憶體抖動的情況 物件復用 1,復用系統自帶資源 2,...

Android效能測試 記憶體篇

android效能測試 記憶體篇 目的 保證合理使用記憶體 使用範圍 新增頁面 老頁面中有新增內容 頁面中有展示 有非同步執行緒跳轉 有頁面跳轉 頁面中有列表展示 頁面中有輸入框 測試項及測試標準 maxmemoryheap allocation memory值小於maxmemoryheap的60 ...

Android效能優化 I O篇

普通方式 public void insertmemberlistnormal listmembermodellist 事務方式 public void insertmemberlistwithtransaction listmembermodellist db.settransactionsucc...