Bootstrap

泄漏检测--LeakCanary分析

版本区分

1.x

Java编写;除引入库,还需要手动执行install;haha三方库

2.0

Kotlin编写;仅需引入库,自动注册监控;shark,基于Okio的自实现的轻巧内存分析库;fragment,支持 androidx

1.x原理:

监听activity的变化,在onDestory时,采用WeakReference引用这个Activity,然后通过系统的GC和手动GC后,判断此引用是否还存在,如果存在,则使用Debug.dumpHpData方式把内存引用Dump出来,再使用HAHA库(一个heap prof堆文件分析库)对hprof文件进行分析,得到泄露路径

2.x原理:

以后分析

 

LeakCanary缺陷:

  只能检测Activity和Fragment的泄漏,对于一些Cursor,Bitmap等泄漏,不能很好的检测,建议结合dumpsy meminfo/MAT等分析泄漏。命令能快速检测一个应用是否有泄漏,而不需要植入代码进去,MAT能快速找到这个APK中泄漏的位置,包括一些Android原生的泄漏(LeakCanary过滤掉了)。

最后不是说LeakCanary控件不好,而是分析这个控件的原理,对比其他同类目的的方法,通过多重手段判断一个应用是否有泄漏。

 

;