我的應用程序使用的服務,我開始在主要活動的onCreate()
方法。當我第一次在平板電腦上啓動應用程序並查看設置/應用程序/運行中運行的應用程序時,它顯示我的服務正在運行並消耗11MB的RAM。瞭解Android應用程序RAM的使用
現在,如果我通過旋轉設備循環20次活動的生命週期,然後回到設置/應用程序/運行,它表明我現在使用29MB的RAM。
起初我以爲這一定是由於內存泄漏,但在循環活動的生命週期之前和之後進行堆轉儲後,我似乎沒有泄漏任何對象。以下是MAT的屏幕截圖,其中標題爲Objects #0
的列在騎車前列出了我的對象的實例,標題爲Objects #1
的列列出了騎車後我的對象的實例。
,併爲所有對象
有沒有出現任何明顯的內存泄漏,但我不明白爲什麼在設置/應用程序的內存佔用/運行在每個定位/生命週期後增加。我在這裏錯過了什麼嗎?爲什麼我的內存使用率明顯增加,當我沒有出現任何內存泄漏?
更新
的原因,我的應用程序是消耗在每個方向上的變化更多的內存是從資產創建自定義字體的結果。我創建了一個自定義的TypefacedTextView
(在上面的屏幕截圖中可以看作是一個對象),每次創建視圖時似乎都會將字體重新加載到內存中。刪除TypefacedTextViews
已解決該問題。使用命令shell dumpsys meminfo my.package.com
的adb工具清楚地表明瞭這個問題,其中列出了我豐富的字體Asset Allocations。
「我的應用程序使用的是我在主Activity的onCreate()方法中啓動的服務,並在活動的onDestroy()方法中停止」 - 爲什麼您有服務? – CommonsWare
@CommonsWare它不在'正確'的應用程序中使用。在調試過程中,我已經把它放在那裏,試圖找出爲什麼RAM會增加。在此調試過程中保持服務運行會產生相同的效果。注意:我也刪除了服務中的所有功能,但仍得到相同的結果。 –
另請注意,在第一次創建活動時,我正在使用工作片段來啓動並綁定到服務。這樣就減少了每次配置發生變化時都需要等待異步的'ServiceConnection'調用(我認爲這種方法在你的一個出色的博客中有描述):) –