Android端可以通過adb 命令直接獲取內存信息,當然Android studio也提供了對內存的監控分析工具,並且后續可以結合MAT做分析
今天介紹的是通過Android studio和MAT工具進行分析的方法:
1、通過Android studio打包之后,app安裝成功
2、點擊 Android Monitor,具體見下圖:
運行APP成功之后,就能看到下圖中所示,說明APP的進程已經啟動起來了,然后就可以進行操作和觀察數據了
看到Android Monitor里面能夠監控的數據有:CPU、內存、網絡、以及GPU
3、查看內存這一欄:
看到以5s為間隔,曲線圖會一直變化,其中深藍色代表已經分配的,淺藍色代表free的
進行多次反復操作,例如進入APP之后再正常退出,觀察內存數據,如果內存一直在增長,就可以初步判定可能有問題
點擊下方的這個卡車,強制gc,之后點擊卡車后面的第一個圖標,將鼠標放上去之后,能夠看到 dump java heap的tips,
之后會生成一個hprof的文件,見下圖:
然后可以點擊 Analyzer Tasks就可以將Analyzer Tasks的項展開,
之后就能看到下方這個圖,勾選Analyzer Tasks下方的兩個內容,分別是檢測Leaked Activities和Find Duplicate Strings
之后點擊右邊的綠色三角按鈕,就可以獲得結果,點擊展開Leaked Activities,就可以看到其中泄漏的Activity對象
之后可以使用MAT工具,對這個hprof文件進行轉換,然后通過MAT工具進行分析;
hprof文件的地址在項目目錄的 captures目錄下
找到這個文件,對文件進行格式轉換,通過sdk工具中的platform-tools/hprof-conv.exe進行格式轉換:
通過cmd命令行即可:hprof-conv from.hprof to.hprof
之后生成的這個hprof文件就可以用MAT打開了,更具體的分析可以見下方數據內容:
內存分析時,其實不一定是內存泄漏就會有問題,內存泄漏指的是一些對象在強制gc之后依然沒有被釋放,但是程序本身的對象申請空間比較大,或者是多次操作總是不釋放,這樣的也會出現問題。
一些容易出現內存問題的場景:
1、存在多圖片的頁面,或者需要申請較大空間的情況(比如切換tab時)
2、存在listview的頁面,listview的復用及及時釋放等
3、Activity不發生變化的頁面,但數據會不變更新的邏輯