使用Android Studio檢測內(nèi)存泄露(LeakCanary)
內(nèi)存泄露,是Android開發(fā)者最頭疼的事??赡芤惶幮⌒〉膬?nèi)存泄露,都可能是毀千里之堤的蟻穴。 怎么才能檢測內(nèi)存泄露呢?
AndroidStudio 中Memory控件臺(顯示器)提供了一個內(nèi)存監(jiān)視器。我們可以通過它方便地查看應(yīng)用程序的性能和內(nèi)存使用情況,從而也就可以找到需要釋放對象,查找內(nèi)存泄漏等。
熟悉Memory界面
打開日志控制臺,有一個標(biāo)簽Memory ,我們可以在這個界面分析當(dāng)前程序使用的內(nèi)存情況。

運行要監(jiān)控的程序(APP)后,打開Android Monitor控制臺窗口,可以看到Memory控制臺。 點擊Memory控制臺上Enable按鈕,Memory控制臺開始顯示正在運行時程序的Memory使用情況。如上圖中顯示:
AndroidStudio Memory的功能:
- 啟動與關(guān)閉Memory監(jiān)測按鈕
- 手動觸發(fā)GC按鈕
- dump java heap 按鈕,點擊Android Studio就開始干活了,成功后會自動打開 hprof文件。
- start(stop) allocation tracking按鈕先點擊一次,然后會看到Memory Recorder開始轉(zhuǎn)動,然后自己開始在APP上面做相應(yīng)的操作。在合適的時間再點一次,結(jié)束記錄。
如何檢測內(nèi)存泄露
我們點擊dump Java heap 這個按鈕,APP會Freeze住。大概幾十秒后,
dump成功后會自動打開 hprof文件。

如果我們想了解內(nèi)存分配更詳細(xì)的情況,可以使用Allocation Traker來查看內(nèi)存到底被什么占用了。 點擊Starg Allocation Tracking按鈕。開始分配追蹤,過一些時間后,點擊Stop Allocation Tracking結(jié)束追蹤的位置。停止追蹤后 .alloc文件會自動打開。

當(dāng)你想查看某個方法的源碼時,右鍵選擇的方法,點擊Jump to source就可以了。
使用LeakCanary
LeakCanary是square公司推出的一款簡單粗暴的檢測內(nèi)存泄漏的工具。
LeakCanary會檢測應(yīng)用的內(nèi)存回收情況,如果發(fā)現(xiàn)有垃圾對象沒有被回收,就會去分析當(dāng)前的內(nèi)存快照,也就是上邊MAT用到的.hprof文件,找到對象的引用鏈,并顯示在頁面上。這款插件的好處就是,可以在手機(jī)端直接查看內(nèi)存泄露的地方,可以輔助我們檢測內(nèi)存泄露。

使用:
在build.gradle文件中添加,不同的編譯使用不同的引用:
dependencies {
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'
}
在應(yīng)用的Application onCreate方法中添加LeakCanary.install(this),如下:
public class ExampleApplication extends Application {
@Override public void onCreate() {
super.onCreate();
LeakCanary.install(this);
}
}
應(yīng)用運行起來后,LeakCanary會自動去分析當(dāng)前的內(nèi)存狀態(tài),如果檢測到泄漏會發(fā)送到通知欄,點擊通知欄就可以跳轉(zhuǎn)到具體的泄漏分析頁面。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
android實現(xiàn)數(shù)獨游戲機(jī)器人
這篇文章主要為大家詳細(xì)介紹了android實現(xiàn)數(shù)獨游戲機(jī)器人,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
Android實現(xiàn)系統(tǒng)的桌面圖標(biāo)文字的雙行顯示效果
這篇文章主要介紹了Android實現(xiàn)系統(tǒng)的桌面圖標(biāo)文字的雙行顯示效果,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2018-10-10
Android Studio真機(jī)無線連接USB設(shè)備調(diào)試運行詳解流程
你在Android Studio寫app時是否也有想過如果可以不用數(shù)據(jù)線連接手機(jī)調(diào)試運行就好了?如果需要取出數(shù)據(jù)線插接的話我肯定是嫌麻煩的,但是模擬器有時候需要測試一些需要硬件支持的功能時又不管用,所以最好的測試還是在真機(jī)上,本篇教你扔掉數(shù)據(jù)線來無線調(diào)試2021-11-11
詳解Android SpannableString多行圖文混排的應(yīng)用實戰(zhàn)
本篇文章主要介紹了Android SpannableString多行圖文混排的應(yīng)用實戰(zhàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12
Kotlin協(xié)程flowOn與線程切換超詳細(xì)示例介紹
這篇文章主要介紹了Kotlin協(xié)程flowOn與線程切換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09

