Android中如何尋找記憶體泄露

來源:互聯網
上載者:User

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記憶體流失簡介》在記憶體中尋找記憶體泄露的原因並解決。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.