編輯:關於Android編程
分析是否有內存洩漏一:adb shell dumpsys meminfo package_name(adb shell dumpsys meminfo pid)
如上圖所示,可以直接看出當前應用的內存占用情況。大多數情況下,我們都是關心第一二兩行的一二兩列。如果我們懷疑某個界面有內存洩漏的情況,就可以通過以下方法來判斷。重復的執行這個步驟多次,然後看一下執行前後內存占用情況。如果內存有明顯的增長,並且一段時間內沒有恢復,基本就可以確認代碼中有內存洩漏的地方。
分析是否有內存洩漏二:DDMS實時查看,注意要在DDMS上顯示系統所有進程,這個需要手機有root權限。
選中要分析的進程,進入heap界面,點擊Cause GC按鈕,之後這個界面會定時刷新。一般只要關注data Object這一行,這個也就是我們的對象占用的內存。java的內存洩漏就是對象使用完沒有及時釋放導致不能被GC。關注data Object一般直接關注total Size,根據這個值的大小增長來判斷當前是否有內存洩漏。同樣在一段時間內重復操作某個動作,觀察data Object的total Size有木有明顯的增長。
上面的兩個方法都是分析應用有木有內存洩漏的問題,主要思想都是重復某一個操作,看看內存有沒有明顯增長,並且沒有恢復。正常的應用都會穩定在一個小的范圍內,有問題的應用一般都是持續增長,很難恢復。兩個工具中,一個是手動刷新,一個是自動刷新,相比較而言,筆者推薦第一個方法。人工控制,感覺更好。
發現應用存在內存洩漏是不夠的,我們最終目的是解決問題。這個時候就需要找到內存洩漏的地方。Eclipse已經為我們提供了強大的內存分析工具MAT,下載地址是:http://www.eclipse.org/mat/。使用這個工具之前,先要生成一個記錄進程內存分部情況的HPROF文件,然後使用MAT來分析內存的占用情況。DDMS上有個DUMP HPROF FILE的按鈕,這個就可以直接生成HPROF文件。
如果eclipse上已經安裝了MAT插件,生成的同時也就打開了這個文件。不過個人喜歡將MAT單獨使用,感覺更快捷更方便。MAT打開了HPROF文件之後,就能顯示當前內存占用圖。
從這個圖中的圓形圖片就能看出當前哪些地方占用的內存最多。一般內存洩漏都是在這幾個地方。圖中有個leak suspects的鏈接,點擊就能查看詳情了,能看到哪些對象占用了內存。如果某個類有太多的對象,基本上就這個類產生的內存洩漏,找到分配對象的地方,很快就能找到哪裡邏輯不健壯,使用完之後沒有及時釋放內存。
分析內存洩漏,找到修改地方都是一劑良藥,能一開始就就注意避免後續的分析才是最好的。
Service 是一個可以在後台執行長時間運行操作而不使用用戶界面的應用組件。 例如,服務可以處理網絡事務、播放音樂,執行文件 I/O 或與內容提供程序交互,而所有這一切
listview作為一個常用控件,對listview的操作都應該滾瓜爛熟了。對listview 的數據管理也很熟悉。包括listview的單擊,雙擊,多選刪除,完成刷新,
本文實例講述了Android編程重寫ViewGroup實現卡片布局的方法。分享給大家供大家參考,具體如下:實現效果如圖:實現思路1. 重寫onMeasure(int wi
在項目中,遇到一個問題百思不得其解,那就是:我在app使用過程中,點擊了home鍵,然後去看看微信之類的其他應用,這個時候再點擊app桌面的圖標,這個時候app是重新啟動