前言:
近階段都在探索android性能測試方面的東西,其中一個很重要的指標就是內存。對于內存,主要是一些gc是不是及時,或者說一些引用有沒有及時釋放,有沒有導致oom或者內存持續增加導致卡頓,有沒有大規模的內存抖動。近期項目由于個別模塊大改,所以也就想把性能測試的東西在實際項目中實踐進去,本文就是針對實踐過程進行一下分享。
Memory Monitor:
1.1內測實時顯示監控
Memory Monitor是android studio自帶的一個非常好用的一個檢測內存變化的工具,他能實時監控針對于某個進程的內存變化,幫助我們來判斷內存是否及時釋放,以及carsh是否超出了內存閥值。當然你也可以手動進行gc,看對象是否有得到釋放。
這里是針對pris云閱讀thread所進行的實時內存監控,通過一些列側滑切換資訊正文后內存發生的變化,可以看到內存持續上升,且返回首頁后仍沒有明顯下降,那么這里的確是出現了一系列問題,是應該關注的內存的問題。
1.2dump java heap
Memory Monitor中dump java heap,能夠dump一段時間內的.hprof文件來進行對象分析,看看是什么對象占用了大量內存
1.3start allocation tracking
Memory Monitor中start allocation tracking 可以手機alloc文件,其中強大的圖標數據,反應了一些線程的具體內存占用情況,是一個很好的分析工具,在使用Memory Monitor過程中可以具體使用Allocation Tracker來對thread進行內存分析,分析哪些activity其中對象的占用內存情況。
LeakCanary:
LeakCanary是一個開源的內存檢測工具,下面是結合閱讀項目的具體實踐。
2.1編輯build.gradle
需要加入具體依賴
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
這里需要說明一下,gradle依賴需要FQ,不FQ很有可能失敗,最好用公司網絡(雖然說失敗過很多次,但還是可以成功的)或者vpn,聲明后重新構建去下載依賴
2.2編輯Application.class開啟LeakCanary
該類即androidManifest中聲明的application類(自定義的會居多,具體可以從androidManifest查看)
在復寫的oncreate()方法中加入如下代碼:
LeakCanary.install(this);
2.3安裝應用到手機
在安裝閱讀app的同時,會在手機中安裝一個監控app
2.4測試apk
此時就可以開始日常測試啦,若有內測泄漏,會有toast提示正在dump數據
打開leak app就可以看到一條具體的內測泄漏信息(這里在toast提示之后會有一定的延遲,過一會兒才會在leak app顯示)
這里具體定位到具體tread和activtiy,你還可以借助heap dump數據進行mat工具分析
這里的例子是引用的對象沒有釋放造成的MainGridActivity頁面的內存泄漏
2.5可share一些數據文件
這里提供share heap dump文件
從git的源碼可以看到,dump的.hprof文件在sdcard/Download/leakcanary目錄下,你也可以通過adb shell下進行查看,并且pull到pc端來進行分析
LeakCanary開源地址:https://github.com/square/leakcanary
借助LeakCanary可以很好的反饋測試過程中的內存泄漏情況,以助于排查一些對象沒有及時釋放導致oom的情況。
本文為作者原創
禁止其他公眾賬號轉載
文章列表