Android 內存泄漏是一個十分頭疼的事情。LeakCanary是一款開源軟件,主要作用是檢測 Android APP 內存泄露。比起以前的 MAT 工具,LeakCanary 有著十分強大的功能,能夠在程序發送內存泄漏的時候提示通知,而且學習成本低。同時提供 log 和 hrpof 日志,便于開發者解決問題。
Paste_Image.png
什么是內存泄露?
一些對象有著有限的生命周期。當這些對象所要做的事情完成了,我們希望他們會被回收掉。但是如果有一系列對這個對象的引用,那么在我們期待這個對象生命周期結束的時候被收回的時候,它是不會被回收的。它還會占用內存,這就造成了內存泄露。持續累加,內存很快被耗盡。
如何使用LeakCanary?
1.添加依賴
dependencies {
//leakcanary
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
// or 1.4-beta1
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
// or 1.4-beta1
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
}
2.Application中調用
public class ExampleApplication extends Application {
@Override public void onCreate() {
super.onCreate();
LeakCanary.install(this);
}
}
LeakCanary使用關鍵步驟?
1.通過 Bugsnag, Crashlytics 或者 Developer Console 等統計平臺,了解 OutOfMemoryError
情況。
2.重現問題。為了重現問題,機型非常重要,因為一些問題只在特定的設備上會出現。為了找到特定的機型,你需要想盡一切辦法,你可能需要去買,去借,甚至去偷。 當然,為了確定復現步驟,你需要一遍一遍地去嘗試。一切都是非常原始和粗暴的。
3.在發生內存泄露的時候,把內存 Dump 出來。具體看這里。
4.然后,你需要在 MAT 或者 YourKit 之類的內存分析工具中反復查看,找到那些原本該被回收掉的對象。
5.計算這個對象到 GC roots 的最短強引用路徑。
6.確定引用路徑中的哪個引用是不該有的,然后修復問題。