2013-08-07 90 views
1

我正在處理一段內存泄漏的應用程序,經過一段時間後,該用戶使用它。我可以通過查看堆大小和分配來使用heap選項卡檢查DDMS中的數據。使用Eclipse內存分析器查找內存泄漏

在應用程序中,用戶總是可以使用設備Camera拍攝圖像,繪製圖像並將其保存在系統中。

通過用戶在系統中創建的每條記錄,分配的內存都在增加一點點,並且在特定數量的記錄發生內存泄漏之後。

我導出DDMS中的.hprof,並將其轉換爲eclipse memory analyzer從Android sdk文件unisg hprof-conv。 我跟隨幾個鏈接,看看問題來自哪裏,如:

Google I/O 2011: Memory management for Android Apps

10 Tips for using the Eclipse Memory Analyzer

我還是找不到問題的根源。這是SkyDrive的Mat.hprof文件:https://skydrive.live.com/#cid=2EB3385F103C2550&id=2EB3385F103C2550%21105

任何人都可以看看這個文件,並給我一些提示,問題來自哪裏?或任何改善建議?

回答

0

您是否嘗試比較MAT中的2個hprof文件?

在直方圖視圖中有一個選項「與另一個堆轉儲進行比較」。它會告訴你之間的2 HPROF文件的差異,那麼這將是更容易找到你的內存泄露

0

很簡單:

- 打開你的場,然後使用支配樹: enter image description here

您可以看到2個保留在堆棧中的大對象,一個來自資源和一個位圖。 - 使用鼠標右鍵單擊顯示的最短路徑,以GC的位圖:

enter image description here

那裏,你可以看到答案。在您的應用程序中,您的res文件夾中可能包含一個大圖像。 問題是,當您直接在佈局中使用此圖像時,這可能會導致內存不足錯誤。你需要使用本教程,以避免內存泄漏以編程方式加載位圖:

http://developer.android.com/training/displaying-bitmaps/index.html

0

後,我有加載MAT你.hprof文件,我看到你的應用程序從內部產生了很多與嵌套集合數組發生OutOfMemoryError。那麼是什麼原因?爲了在AutoCompleteTextView中獲得結果,您使用的處理程序可能會導致內存泄漏,它可以最終爲當前視圖和您的活動提供強有力的參考。在生命週期事件發生時,您應該更多地關注收集發佈過程。