leakcanary jar包是leakcanary内存泄露检测工具中一款必备的Java包,主要用于内存泄漏检测功能的实现,leakcanary jar包分为两个,一个包含源码一个不包含,需要的开发者可以下载!
leakcanary使用方法
首先搞定库文件:
下载好5个包:
haha-1.3.jar
leakcanary-analyzer-1.3.1.jar
leakcanary-android-1.3.1.aar
leakcanary-android-no-op-1.3.1.aar
leakcanary-watcher-1.3.1.jar
下载地址:http://search.maven.org/
将五个库文件放到项目的libs目录下面,然后修改build.gradle文件,将新增的几个库文件加入到项目编译中。
修改build.gradle文件:
jar文件直接加入到compile文件中,对于aar文件则需要再加上后半段repositories进行编译,另外注意这两个文件:leakcanary-android-1.3.1 和 leakcanary-android-no-op-1.3.1 不能同时加入编译。
dependencies {
/*add more ...*/
chnCompile files('libs/leakcanary-analyzer-1.3.1.jar')
chnCompile files('libs/leakcanary-watcher-1.3.1.jar')
chnCompile files('libs/haha-1.3.jar')
compile(name:'leakcanary-android-1.3.1',ext:'aar')
//compile(name:'leakcanary-android-no-op-1.3.1',ext:'aar')
}
repositories {
flatDir{
dirs 'libs'
}
}
检测内存泄露的原理:
RefWatcher.watch() 创建一个 KeyedWeakReference 到要被监控的对象。
在当前的activity或者fragment进入onDestory()销毁对象时,如果引用还是未被清除,把 heap 内存 dump 到 APP 对应的文件系统中的一个 .hprof 文件中。
在另外一个进程中的 HeapAnalyzerService 有一个 HeapAnalyzer 使用HAHA 解析这个文件。
得益于唯一的 reference key, HeapAnalyzer 找到 KeyedWeakReference,定位内存泄露。
HeapAnalyzer 计算 到 GC roots 的最短强引用路径,并确定是否是泄露。如果是的话,建立导致泄露的引用链。
引用链传递到 APP 进程中的 DisplayLeakService, 并以通知的形式展示出来。