高效地分析Android內存--MAT工具解析


歡迎Follow我的GitHub, 關注我的CSDN.

MAT(Memory Analyzer Tool), 是著名的Android內存分析工具, 雖然LeakCanary更加便捷, 但是MAT可以清楚地獲知整體內存使用情況, 還是必須要掌握的. 我來講解一下如何使用.


1. 內存文件

使用Android Studio底部的AndroidMonitor, 獲取內存片段.

點擊Initial GC回收內存, 使用應用, Dump Java Heap, 再次點擊停止.

AndroidMonitor

在Android的SDK中的platform-tools文件夾內, hprof-conv腳本把AS的內存格式轉換為MAT的內存格式. 之后, 使用MAT打開文件.

使用命令

./hprof-conv path/file.hprof exitPath/heap-converted.hprof

2. 分析內存

下載Eclipse的MAT工具.

雖然是Eclipse的工具, 但是可以單獨運行, 並不需要安裝Eclipse.

打開內存片段, 選擇內存報告.

內存報告

內存整體情況.

整體內存

選擇直方圖樣式, 添加包名過濾.

對象引用


3. 判斷泄露

Activity或View大於1個對象, 都有可能發生內存泄露.

顯示內存的所有引用情況

所有引用

逐個判斷即可, 有些對象的引用較多, 可能是使用了數組, 並不一定是內存泄露.

顯示單個類的內存情況

查詢類

使用搜索功能, 輸入SQL語句, 並執行. 紅色嘆號執行搜索.

通過觀察, 我們發現微信mWXApi傳入了錯誤的Context, 導致內存泄露.

泄露狀況

代碼

        mFriendsPlatform = new WXSharePlatform(mActivity, title, content,
bitmap, pageUrl, SendMessageToWX.Req.WXSceneTimeline);

直接傳入Activity導致內存泄露, 修改為getApplicationContext即可.


其實還比較復雜, 簡單的方法是使用LeakCanary, 參考.

OK, that’s all! Enjoy it!


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com