Android中如何查找內存泄露

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內存泄漏簡介》在內存中查找內存泄露的緣由並解決。

相關文章
相關標籤/搜索