1、首先肯定是否有內存泄露及哪一個程序形成。 php
1.一、內存泄露已彈出out of memory對話框的狀況。 eclipse
這種狀況很簡單,直接看對話框就知道是哪一個應用的問題了。而後再分析該應用是不是由於內存泄露形成的out of memory對話框。 工具
1.二、對於有內存泄露,但沒形成彈出out of memory對話框的狀況 spa
使用《Android中如何查看內存》中介紹的各類方法進行分析,肯定是否有內存泄露以及是哪一個進程形成的內存泄露。 blog
二、生成hprof文件,用MAT進行分析。 進程
生成hprof文件能夠在DDMS選中進程點擊窗口左上角的"dump hprof file"按鈕來直接生成,也能夠經過在程序加代碼中來生成 ip
代碼2: 內存
void generateHprof() get
{ input
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的詳細信息,進一步找出嫌疑項。
三、在代碼中查找內存泄露。
根據在MAT找到的內存泄露信息,參照《Android內存泄漏簡介》進一步在內存中查找內存泄露的緣由並解決。
另外若是代碼很簡單,能夠直接參照《Android內存泄漏簡介》在內存中查找內存泄露的緣由並解決。