1.什么是内存泄露?
简单的理解就是,本应该被GC回收的对象,因为使用不当没有被GC回收。
2.什么是Java GC
如图所示,不属于GC Root层的对象,在java判定的内存紧张情况下会被回收掉。
GC的回收对象:GC会收集那些不是GC roots且没有被GC roots引用的对象在内存不够用的情况下进行回收。
3.leakcanary的使用方法
leakcanary是Square公司为Android开发者提供的一个自动检测内存泄漏的工具,Git地址:https://github.com/square/leakcanary
a)Android Studio 在Module下build.gradle下使用依赖:
dependencies {
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.1' //测试版本使用
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.1' //正式版本使用
debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.1' //fragment检测
}
b)在自定义Application中初始化
if (!LeakCanary.isInAnalyzerProcess(this)) {
LeakCanary.install(this);
}
4.查看说明
集成后对原来的使用不会造成任何影响,只有当应用在某一处发生了泄露时,手机会自动安装一个应用图标如下:
点开这个App,里有如下界面:该界面显示的是内存泄露出现的次数,和出现的位置
点开某一条会出现如下界面:表示出现泄露的根源所在是singleton
网友评论