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内存泄漏简介》在内存中查找内存泄露的缘由并解决。