1、首先確定是否有記憶體泄露及哪個程式造成。
1.1、記憶體泄露已彈出out of memory對話方塊的情況。
這種情況很簡單,直接看對話方塊就知道是哪個應用的問題了。然後再分析該應用是否是因為記憶體泄露造成的out of memory對話方塊。
1.2、對於有記憶體泄露,但沒造成彈出out of memory對話方塊的情況
使用《Android中如何查看記憶體》中介紹的各種方法進行分析,確定是否有記憶體泄露以及是哪個進程造成的記憶體泄露。
2、產生hprof檔案,用MAT進行分析。
產生hprof檔案可以在DDMS選中進程點擊視窗左上方的"dump hprof file"按鈕來直接產生,也可以通過在程式加代碼中來產生
代碼2:
void generateHprof()
{
String packageName=getApplicationInfo().packageName;
String hpFilePath="/data/data/"+packageName+"/input.hprof";
try {
//Debug.dumpHprofData("/sdcard/input.hprof");
Debug.dumpHprofData(hpFilePath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
建議使用代碼產生hprof,然後使用《Android記憶體泄露利器(hprof篇)》中的工具自動提取多個hprof檔案,然後用MAT進行比較分析。
在MAT匯入.hprof檔案以後,MAT會自動解析並產生報告,點擊Dominator
Tree,並按Package分組,選擇自己所定義的Package類,比較各個類在不同時期的Retained Heap,找出可疑類,然後選擇該類,點右鍵,選中show retained Set 項,參看Retained Heap的詳細資料,進一步找出嫌疑項。
3、在代碼中尋找記憶體泄露。
根據在MAT找到的記憶體泄露資訊,參照《Android記憶體流失簡介》進一步在記憶體中尋找記憶體泄露的原因並解決。
另外如果代碼很簡單,可以直接參照《Android記憶體流失簡介》在記憶體中尋找記憶體泄露的原因並解決。