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

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

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

當(dāng)你想查看某個(gè)方法的源碼時(shí),右鍵選擇的方法,點(diǎn)擊Jump to source就可以了。
使用LeakCanary
LeakCanary是square公司推出的一款簡(jiǎn)單粗暴的檢測(cè)內(nèi)存泄漏的工具。
LeakCanary會(huì)檢測(cè)應(yīng)用的內(nèi)存回收情況,如果發(fā)現(xiàn)有垃圾對(duì)象沒(méi)有被回收,就會(huì)去分析當(dāng)前的內(nèi)存快照,也就是上邊MAT用到的.hprof文件,找到對(duì)象的引用鏈,并顯示在頁(yè)面上。這款插件的好處就是,可以在手機(jī)端直接查看內(nèi)存泄露的地方,可以輔助我們檢測(cè)內(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)用運(yùn)行起來(lái)后,LeakCanary會(huì)自動(dòng)去分析當(dāng)前的內(nèi)存狀態(tài),如果檢測(cè)到泄漏會(huì)發(fā)送到通知欄,點(diǎn)擊通知欄就可以跳轉(zhuǎn)到具體的泄漏分析頁(yè)面。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android LeakCanary的使用方法介紹
- Android中的LeakCanary的原理詳解
- Android 進(jìn)階實(shí)現(xiàn)性能優(yōu)化之OOM與Leakcanary詳解原理
- Android LeakCanary檢測(cè)內(nèi)存泄露原理
- Android中LeakCanary檢測(cè)內(nèi)存泄漏的方法
- Android內(nèi)存泄漏排查利器LeakCanary
- Android性能優(yōu)化之利用強(qiáng)大的LeakCanary檢測(cè)內(nèi)存泄漏及解決辦法
- 詳解LeakCanary分析內(nèi)存泄露如何實(shí)現(xiàn)
相關(guān)文章
快速調(diào)試Android應(yīng)用系統(tǒng)修改ro.debuggable屬性的兩種方式
這篇文章主要為大家介紹了快速調(diào)試Android應(yīng)用系統(tǒng)修改ro.debuggable屬性的兩種方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
android自定義gradle插件并且發(fā)布到本地倉(cāng)庫(kù)詳細(xì)教程
這篇文章主要介紹了android自定義gradle插件并且發(fā)布到本地倉(cāng)庫(kù)詳細(xì)教程的相關(guān)資料,需要的朋友可以參考下2023-07-07
如何給Flutter界面切換實(shí)現(xiàn)點(diǎn)特效
這篇文章主要給大家介紹了關(guān)于如何給Flutter界面切換實(shí)現(xiàn)點(diǎn)特效的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Flutter具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Android編程實(shí)現(xiàn)Home鍵的屏蔽,捕獲與修改方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)Home鍵的屏蔽,捕獲與修改方法,實(shí)例分析了使用onAttachedToWindow捕獲Home鍵的相關(guān)技巧,需要的朋友可以參考下2016-06-06
Android大圖監(jiān)測(cè)系統(tǒng)的三種實(shí)現(xiàn)方式
在Android應(yīng)用中,大圖的加載和顯示可能導(dǎo)致內(nèi)存占用過(guò)高,進(jìn)而引發(fā)OOM(Out Of Memory)異常,影響應(yīng)用的穩(wěn)定性和用戶體驗(yàn),為了更好地管理大圖資源,我們需要建立起一套可靠的大圖監(jiān)測(cè)系統(tǒng),文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-01-01
Android webview加載https鏈接錯(cuò)誤或無(wú)響應(yīng)的解決
這篇文章主要介紹了Android webview加載https鏈接錯(cuò)誤或無(wú)響應(yīng)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
SurfaceView播放視頻發(fā)送彈幕并實(shí)現(xiàn)滾動(dòng)歌詞
這篇文章主要為大家詳細(xì)介紹了SurfaceView播放視頻發(fā)送彈幕并實(shí)現(xiàn)滾動(dòng)歌詞,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
Android 開(kāi)發(fā)照相功能實(shí)例詳解
這篇文章主要介紹了Android 開(kāi)發(fā)照相功能實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04
Android 動(dòng)態(tài)改變布局實(shí)例詳解
這篇文章主要介紹了Android 動(dòng)態(tài)改變布局實(shí)例詳解的相關(guān)資料,這里舉例說(shuō)明如何實(shí)現(xiàn)動(dòng)態(tài)改變布局的例子,幫助大家學(xué)習(xí)理解,需要的朋友可以參考下2016-11-11
Android實(shí)現(xiàn)自動(dòng)輪詢的RecycleView
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)自動(dòng)輪詢的RecycleView,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10

